您的位置:首页 > 编程语言 > Java开发

SpringCloud----ribbon重试机制和Hystrix熔断器

2019-12-11 17:12 337 查看

1.重试机制Ribbon

1.1 概述: 服务B访问集群环境下的服务A,某一个服务A宕机,服务B将尝试访问其他可以使用的服务A.

1.2 实现步骤:

  • 步骤一 : 修改pom.xml文件,添加重试机制的依赖       

<!--重试机制-->
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>

•步骤二 : 修改yml文件,开启cloud重试机制

spring:
  cloud:
    loadbalancer:
      retry:
        enabled: true   #开启重试机制

•步骤三 : 修改yml 文件,配置当前服务的重试参数

格式:  {服务名称}.ribbon.参数名 : 具体值

service4:
  ribbon:
    ConnectTimeout: 250                      # Ribbon的连接超时时间
    ReadTimeout: 1000                         # Ribbon的数据读取超时时间
    OkToRetryOnAllOperations: true    # 是否对所有操作都进行重试
    MaxAutoRetriesNextServer: 1         # 切换实例的重试次数
    MaxAutoRetries: 1                          # 对当前实例的重试次数

 1.3运行测试 :

当多个消息提供者关闭一个,不会请求返回异常,经过连接超时时间就会返回所有响应数据

2.熔断器Hystrix

2.1 概述:Hystrix是Netflix开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败。

2.2 功能: 当服务繁忙时,如果服务出现异常,不是粗暴的直接报错,而是返回一个友好的提示,虽然拒绝了用户的访问,但是会返回一个结果。

2.3 实现步骤 :

• 步骤一 :  修改pom.xml文件,添加Hystrix的依赖

<!--熔断器-->

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

•步骤二 : 开启熔断(启动类上加入@EnableHystrix注解) 

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix      //开启熔断器
public class ClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ClientApplication.class,args);
    }
}

•步骤三 : 修改消费者

查找方法并在方法上添加注解声明一个失败时的回滚处理函数

@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
(window.slotbydup = window.slotbydup || []).push({ id: "u5894387", container: "_0hv0l6ey3zro", async: true });
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息