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

1.重试机制Ribbonspring

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

1.2 实现步骤:学习

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

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

•步骤二 : 修改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>
    <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
相关文章
相关标签/搜索