七、Spring Cloud 之旅 -- Hystrix 微服务保护和容错机制

在分布式环境中,总会有些节点或者依赖的服务时效(宕机,网络延迟等), Hystrix的出现就是来很好的处理这种可怕问题的,它里面增加了很多容错机制,比如修改请求的线程池大小、信号量等来帮助我们控制分布式系统间组件的交互。Spring Cloud将Hystrix整合到Netflix项目中,Hystrix通过隔离服务间的访问点、停止他们之间的级联故障、提供可回退操作来实现容错。

 

好了,概念啰嗦完了,现在你知道Hystrix大概是一个什么东东了,现在我们来玩玩代码。

本节演示的项目结构依旧是老三样,需要源码的童鞋请前往本人github下载:

https://github.com/aharddreamer/chendong/tree/master/springcloud/hystrix-CSDN/

项目结构:

eureka-server: 集群服务器

first-service-provider: 微服务提供者

first-service-invoker: 微服务调用者

只要这三样,我们几乎可以玩转整个Spring Cloud。

实现方式:

(不得不说Spring Cloud项目真是方便,集成一个组件就只需要三步: 加依赖,加配置,稍加代码或注解)

我们先在first-service-invoker的POM里面加入Hystrix的依赖:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

 

然后在启动类加入注解@EnableCircuitBreaker启用断路器

我在这里面还配置了一个restTemplate, 方便调用其他微服务。

新建一个HelloService,在里面定义一个简单的Command。

这个Command要做的事情很简单,就是当getMessage方法出错时,会执行getMessageFallback方法返回一个默认返回值。

新建一个测试接口,跑跑看。

当然在first-service-provider里面要定义一个message接口供Invoker模块调用:

 

好了,分别启动eureka-server, first-service-provider, first-service-invoker,然后访问http://localhost:9000/test 试试 (service provider的端口是8080, service invoker的端口是9000)。

 

试着停掉first-service-provider微服务,然后再访问试试:

变成了default message

 

除了上述配置外,你还可以给HystrixCommand加入很多其他配置,都可以在命令注解里完成:

@HystrixCommand(fallbackMethod = "getMessageFallback", groupKey = "MyGroup",

            commandKey = "MyCommandKey", threadPoolKey = "MyCommandPool",

            commandProperties = {

            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")},

            threadPoolProperties = {

            @HystrixProperty(name = "coreSize", value = "1")}

)

 

当然,也可以在类上面加@DefaultProperties(groupKey=”xxx”)来使用默认配置:

 

我们也可以使用缓存注解,这样就不用每次都去call 其他微服务了。

使用缓存注解要先加一个过滤器,在过滤器里面配置下Hystrix的context

加个注解@CacheResult

 

 

 

posted @ 2019-04-04 00:01  SEC.VIP_网络安全服务  阅读(80)  评论(0编辑  收藏  举报