SpringCould-hystrix

在ribbon+restTemplate方式使用熔断器hystrix

阻止服务故障的“雪崩”效应(我简称保险)

  1. ribbonrest项目上添加compile('org.springframework.cloud:spring-cloud-starter-netflix-hystrix')该依赖(这里用的gradle,maven做相应格式修改),或者直接新建一个项目勾选如下

    • web->web
    • Could discovery-> eureka server
    • Could routing->ribbon
    • Could Circuit Breaker->Hystrix
  2. application启动类添加一个注解@EnableHystrix拉上保险开关

  3. 修改服务调用类HelloService

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    @Service
    public class HelloService {
    @Autowired
    RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "hiError") //调用发生错误就调用hiError方法
    public String hiService(String name){
    //eureka-client为服务提供者的spring.application.name=eureka-client
    return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class);
    }
    //发生错误调用的方法
    public String hiError(String name) {
    return "hi,"+name+",sorry,error!";
    }
    }
  4. 启动该服务(8093),然后访问http://127.0.0.1:8093/resthi?name=32,然后再停止两台服务提供者的其中一台,然后刷新一台提示错误,一台正常访问

    启动顺序 访问结果 再启动 结果
    注册中心-服务提供者(1和2)-服务消费者 2台交替访问
    注册中心-服务提供者(1)-服务消费者-服务提供者(2) 1能访问
    注册中心-服务提供者(1和2)-服务消费者-停止1 1抛异常,2正常访问 再启动1 恢复时间慢
    注册中心-服务提供者(1和2)-服务消费者(开启了熔断器)-停止1 1返回熔断器自定义的错误信息,2正常访问 再启动1 马上可以交替访问

在feign模式使用熔断器

Feign是自带断路器的

  1. 新建SchedualServiceHiHystric实现服务调用的接口

    1
    2
    3
    4
    5
    6
    7
    @Component
    public class SchedualServiceHiHystric implements FeignSchedualService{
    @Override
    public String sayHiFromEurekaClient(String name) {
    return "sorry "+name;
    }
    }
  2. 在服务调用接口的@FeignClient添加fallback指向刚刚实现这个接口的类

    1
    2
    3
    4
    5
    @FeignClient(value = "eureka-client",fallback = SchedualServiceHiHystric.class) //指定调用那个服务(服务名spring.application.name)
    public interface FeignSchedualService {
    @RequestMapping(value = "/hi",method = RequestMethod.GET) //指定调用eureka-client服务的那个接口
    String sayHiFromEurekaClient(@RequestParam(value = "name") String name);
    }
  3. application配置文件添加该配置启用熔断器

    1
    2
    3
    feign:
    hystrix:
    enabled: true
  4. 依次启动注册中心,该服务(8094),然后访问http://127.0.0.1:8094/sayhi?name=32,启动测试见上面的第四步骤

    区别:服务提供者挂了一个不会交替返回正确错误信息,只要还有一个服务正常就返回正确信息,直到所有服务提供者挂了才返回错误信息。

参考

用 Feign Hystrix 进行服务集成

forezp/SpringCloudLearning