Springcloud集成hystrix
1.引入pom依赖
<!--引入hystrix 熔断组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
2.整合Feign(消费者)
这里要注意一点,很多教材上说Feign集成hystrix是默认启用的,但是我今天实测,并不是那样,需要在配置文件中启用,代码如下:
##开启Feign对hystrix的支持
feign:
hystrix:
enabled: true
2.1修改启动类
加注解@EnableHystrix 或者 @EnableCircuitBreaker,前者是包含后者的,代码如下:
@EnableEurekaClient
@SpringBootApplication
//如果Feign和接口定义不在同一个包下面,需要指定扫描的包。
@EnableFeignClients(basePackages = "com.studycloud.microservicesimpleconsumeuser.client")
//整合hystrix
@EnableHystrix //或者 @EnableCircuitBreaker
public class MicroserviceSimpleConsumeUserApplication {
public static void main(String[] args) {
SpringApplication.run(MicroserviceSimpleConsumeUserApplication.class, args);
}
@Bean
@LoadBalanced//这个注解会自动构造LoadBalancerClient接口的实现类并注册•到ioc
public RestTemplate getR(){
return new RestTemplate();
}
}
2.2修改Feign client接口,添加回退配置
fallback 代表client回退配置所在类,代码如下:
//value 代表服务实例信息,
//path 代表该服务对应的controller的RequestMapping地址
//configuration 日志配置文件
@FeignClient(value = "LFQ-PROVIDE-8081",
path = "/providedata",
configuration = FeignConfiguraion.class,
fallback = ProvideClientImpl.class
)
public interface ProvideClient {
@RequestMapping("getUser")
UserInfo getUser(String name);
@RequestMapping("getData")
public String getData();
}
ProvideClientImpl 是feign client中的实现类,重写所有feign client中的方法,这里要注意一点,实现之后,在注入Bean的时候会报错,这个可以不用管的,按照之前的用法就可以。代码如下:
@Component
public class ProvideClientImpl implements ProvideClient {
@Override
public UserInfo getUser(String name) {
return new UserInfo();
}
@Override
public String getData() {
return "fail";
}
}
2.3 测试
启动所有服务,访问正常:
关闭服务提供端,再次调用,返回的就是回退函数中的数据。