微服务架构开发实战:熔断与降级的区别、如何集成Hystrix

微服务架构开发实战:熔断与降级的区别、如何集成Hystrix

首页休闲益智micro breaker更新时间:2024-06-18
熔断与降级的区别

熔断与降级的区别,很多开发者都会产生混淆。下面总结下两者的异同点。

熔断与降级的相似点

服务降级与服务熔断两者从某些角度看是有一定的类似性的。

·目的一致。两者都是从可用性、可靠性出发,为防止系统的整体缓慢甚至崩溃而采用的技术手段。

·表现类似。两者最终表现都是让用户体验到的是某些服务暂时不可达或不可用。

·粒度一致。一般都是服务级别,当然,业界也有不少更细粒度的做法,如做到数据持久层(允许查询,不允许增删改)﹔都依赖自动化。服务熔断一般都是服务基于策略的自动触发,服务降级虽说可人工干预,但在微服务架构下,完全靠人显然不现实,所以会纳入自动化配置。

熔断与降级的区别

两者的主要区别有两点。

·触发条件不同。服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑。

.管理目标的层次不同。服务熔断针对的是整个框架级的处理,每个微服务都是需要的,并无层级之分;而服务降级一般需要对业务有层级之分,比如降级—般是从最外围服务开始。


如何集成 Hystrix

在Spring Cloud框架里,熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,就会启动熔断机制。熔断机制的注解是@HystrixCommand,Hystrix会找有这个注解的方法,并将这类方法关联到和熔断器连在一起的代理上。

本节我们将基于Hystrix来实现断路器。

在micro-weather-cureka-client-feign的基础上稍作修改,即可成为一个新的应用micro-weath-er-eureka-client-feign-hystrix,并将其作为示例。

所需环境

为了演示本例子,需要采用如下开发环境。

更改配置

要使用Hystrix,最简单的方式莫过于添加Hystrix依赖。

dependencies{ //... //添加 Spring Cloud Starter Netflix Hystrix依赖 compile('org.springframework.cloud:spring-cloud-starter-netflix- hystriz') )使用Hystrix

要启用Hystrix,最简单的方式就是在应用的根目录的Application类上添加org.springframe-work.cloud.client.circuitbreaker.EnableCircuitBreaker注解。 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.Enable CircuitBreaker; import org.springframework.cloud.client.discovery.EnableDiscovery Client; import org.springframework.cloud.netflix.feign.EnableEeignClients; /** 主应用程序. * *@since 1.o.0 2017年11月12日 * @author <a href="https://waylau.com">Way Lau</a> */ @SpringBootApplication EnableDiscoveryClient @EnableFeignClients EnableCircuitBreaker public class Application{ public static void main(String[] args) { SpringApplication.run(Application.class,args); } }增加断路器

原有的micro-weather-eureka-client-feign,已经定义了用Feign客户端CityClient.import org.springframework.cloud.netflix.feign.FeignClient;

import org.springframework.web.bind.annotation.GetMapping; /** *访问城市信息的客户端. * *@since 1.0.0 2017年11月4日 *@author <a href="https://waylau.com">Way Lau</a> */ FeignClient("msa-weather-city-eureka") public interface CityClient { @GetMapping("/cities") String listCity(); }

CityClient实现了从城市数据API微服务msa-weather-city-eureka中获取城市的信息。

我们在调用CityClient的CityController.listCity()方法之上,增加com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand注解。

package com.waylau.spring.cloud.weather.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; iavanica.annotation.HystrixCommand; import com.waylau.spring.cloud.weather.service.cityClient; /** *City controller. * *since 1.o.o 2017年11月04日 * @author <a href="https://waylau.com">Way Lau</a> */ @RestController public class CityController { @Autowired private CityClient cityClient; @GetMapping("/cities") @HystrixCommand(fallbackMethod = "defaultCities") public String listCity({ //通过Feign客户端来查找 String body = cityClient.listCity(; return body; /*大 *自定义断路器默认返回的内容 *@return */ public String defaultCities(){ return"城市数据API服务暂时不可用!"; } }

HystrixCommand注解中,我们设置了fallbackMethod 的值为“defaultCities”。fallbackMethod是用于设置回调的方法,这里我们定义了一个返回默认值为“城市数据API服务暂时不可用!”的方法。

修改应用配置

应用配置修改如下。

spring.application.name: micro-weather-eureka-client-feign-hystrix eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/ feign.client.config.feignName.connectTimeout:5000 feign.client.config.feignName.readTimeout: 5000运行、测试

启动在之前章节中创建的micro-weather-eureka-server和 msa-weather-city-eureka两个项目,以及本例的micro-weather-eureka-client-feign-hystrix。其中,micro-weather-cureka-server默认启动在8761端口,msa-weather-city-cureka启动在8085端口,micro-weather-eureka-client-feign-hystrix启动在8080端口。

java -jar micro-weather-eureka-server-1.0.0.jar --server.port=8761 java -jar msa-weather-city-eureka-1.0.0.jar--server.port=8085 java -jar micro-weather-eureka-client-feign-hystrix-1.0.0.jar --server. port=8080

如果一切正常,那么micro-weather-cureka-server运行的管理界面,能看到上述服务的信息。

在浏览器访问micro-weather-cureka-client-feign-hystrix服务(本例地址为http:/localhost:8080 ) ,当我们试图访问http:/localhost:8080/cities接口时,访问如果一切正常,可以在页面看到如图15-2所示msa-weather-city-eureka服务正常时所响应的内容。

我们关闭msa-weather-city-eureka服务进程,来模拟城市数据API微服务不可用时的状态。此时,再次访问http://localhost:8080/cities接口时,可以在页面看到如图15-3所示HystrixCommand回调方法所响应的内容。

源码

本节示例所涉及的源码,见micro-weather-eureka-server、micro-weather-cureka-client-feign.msa-weather-city-eureka,以及micro-weather-eureka-client-feign-hystrixo

本篇文章内容给大家讲解的是熔断与降级的区别、如何集成 Hystrix
  1. 下篇文章给大家讲解的是实现微服务的熔断机制;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!
查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved