1.重试机制Ribbonspring
1.1 概述: 服务B访问集群环境下的服务A,某一个服务A宕机,服务B将尝试访问其余可使用的服务A.函数
1.2 实现步骤:学习
• 步骤一 : 修改pom.xml文件,添加剧试机制的依赖 测试
<!--重试机制--> |
•步骤二 : 修改yml文件,开启cloud重试机制xml
spring: cloud: loadbalancer: retry: enabled: true #开启重试机制 |
•步骤三 : 修改yml 文件,配置当前服务的重试参数ci
格式: {服务名称}.ribbon.参数名 : 具体值io
service4: ribbon: ConnectTimeout: 250 # Ribbon的链接超时时间 ReadTimeout: 1000 # Ribbon的数据读取超时时间 OkToRetryOnAllOperations: true # 是否对全部操做都进行重试 MaxAutoRetriesNextServer: 1 # 切换实例的重试次数 MaxAutoRetries: 1 # 对当前实例的重试次数 |
1.3运行测试 :table
当多个消息提供者关闭一个,不会请求返回异常,通过链接超时时间就会返回全部响应数据class
2.熔断器Hystrix
2.1 概述:Hystrix是Netflix开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败。
2.2 功能: 当服务繁忙时,若是服务出现异常,不是粗暴的直接报错,而是返回一个友好的提示,虽然拒绝了用户的访问,可是会返回一个结果。
2.3 实现步骤 :
• 步骤一 : 修改pom.xml文件,添加Hystrix的依赖
<!--熔断器--> <dependency> |
•步骤二 : 开启熔断(启动类上加入@EnableHystrix注解)
@SpringBootApplication |
•步骤三 : 修改消费者
查找方法并在方法上添加注解声明一个失败时的回滚处理函数
@HystrixCommand(fallbackMethod = “回滚函数的函数名”) |
2.4 运行测试
请求超过一秒(默认1000毫秒)得不到响应,就回执行回滚处理函数,返回替代内容
3.ribbon和Hystrix相结合
3.1简述:
若是熔断和重试机制,都配置,是都生效?仍是某个生效?
经测试发现是熔断生效,为何?
实际执行后发现,没有触发重试机制,而是先触发了熔断,缘由是这两种技术都采用的是默认时间1000毫秒,而这不是咱们想要的结果,咱们学习了这两种技术,天然是想把它们融合到项目中,因此咱们采用的解决方案是 Ribbon的超时时间必定要小于Hystrix的超时时间.
3.2实现步骤:
咱们能够经过
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
来设置Hystrix超时时间。(注意设置的值为 毫秒值)
hystrix: command: default: execution: isolation: thread: timeoutInMillisecond: 6000 # 设置hystrix的超时时间为6000ms |