使用Spring Cloud和Netflix Hystrix的客户端弹性模式(学习笔记)

项目代码:使用Spring Cloud和Netflix Hystrix的客户端弹性模式
同样首先记得将Sql服务,Eureka,配置服务开启,然后再开启许可证服务。
小笔记:Spring cloud config的默认端口是8888,所以下面的配置是暂时禁用服务发现。然后直接从默认端口去找配置服务,从运行日志上也能直接看出来。
在这里插入图片描述
在这里插入图片描述

一、搭建许可证服务以使用Spring Cloud和Hystrix

添加依赖:
在这里插入图片描述
添加注解以使用Hystrix:
在这里插入图片描述

二、使用Hystrix实现断路器

1.数据库调用增加断路器

在这里插入图片描述
运行许可证服务,然后用postman试着去调一下服务:

http://localhost:8080/v1/organizations/e254f8c-c442-4ebe-a82a-e2fc1d1ff78a/licenses/

调用时有时就会成功,有时就会失败:
在这里插入图片描述
在这里插入图片描述

2.对组织微服务的调用增加超时

和数据库用法是一样的。
在这里插入图片描述
小笔记:这里HystrixCommand没有加任何参数配置,默认的会将所有远程调用服务都放在同一线程池下,这可能会导致应用程序中出现问题,后面说舱壁的时候再去讨论它,现在先不管。

3.定制断路器的超时时间

增肌一条注解参数即可,这里配成12s。

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

在这里插入图片描述

三、后备处理

在这里插入图片描述
用Postman验证:
在这里插入图片描述

四、实现舱壁模式。

小笔记:默认情况下,Hystrix的线程池有10个线程。
在这里插入图片描述
小笔记:maxQueueSize设为-1,则将使用SynchronousQueue来保存所有传入的请求,大于0的话用LinkedBlockingQueue。
设为0的话可以用queueSizeRejectionThreshold属性来动态更改队列的大小。

五、微调Hystrix

短路的算法是,在一个时间窗口里(默认10s),先看调用次数,次数少的话,就不考虑断路。
次数多了,就查看失败的百分比,达到阈值,就断路。
短路之后,在一个时间窗口里(5s),尝试重新调用(发一个调用),成功了就让它接上,不成功就再开一个时间窗口。
配置如下:
在这里插入图片描述
这里桶的用处,是底层实现的具体细节,这里后面我需要补一下其算法知识。

六、线程上下文和Hystrix

小笔记:Hystrix的舱壁默认是用线程池来隔离的,还可以调成信号量。一般还是建议用线程池。

1.ThreadLocal与Hystrix。

默认情况下,Hystrix不会将父线程的上下文环境传递到Hystrix命令管理的线程中去。(线程池管理,TRREAD隔离级别)。也就是说在父线程中设为为ThreadLocal的值在子线程都是不可用的。
验证:
在做验证之前,我们要把这里的Configuration给注释掉,因为这是下面一个小节需要讨论的知识。
在这里插入图片描述
用拦截器找到REST请求的ID,全局跟踪。
在这里插入图片描述
注意拦截器里有打的第一个日志。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果显然符合预期。

2.HystrixConcurrencyStrategy实战

Hystrix允许开发人员自定义并发策略,它将包装Hystrix调用,并允许开发人员将附加的父线程上下文注入由Hystrix管理的线程中。有三步操作。

  1. 定义自定义的Hystrix并发策略类。
  2. 定义一个Callable类,将UserContext注入到Hystrix命令中。
  3. 配置Spring Cloud以使用自定义Hystrix并发策略。

2.1自定义Hystrix并发策略类

小笔记:Hystrix只需要定义一个策略,但是允许将多个策略插入到一个“策略组”中。
在这里插入图片描述
小笔记:为了健壮性,要吗调用已存在,要吗调基类这种做法是必要的,否则可能会出现问题。

2.2定义Callabe类。

在这里插入图片描述
在这里插入图片描述
然后再运行一下,就发现:
在这里插入图片描述
与预期相符。

七、Docker运行

这个就不多说了,参考第三章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章