一:Ribbon的熔断:
在之前的springcloud-ribbon工程中做修改:
1.在pom中引入Hystrix依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
2.在启动类中加入@EnableHystrix开启熔断器
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public class RibbomMain {
public static void main(String[] args) {
SpringApplication.run(RibbomMain.class, args);
}
@Bean
@LoadBalanced//指明此bean实例调用负载均衡
RestTemplate restTemplate() {
return new RestTemplate();
}
}
3.在消费方法上加上@HystrixCommand注解,并指明熔断方fallback方法(fallbackMethod = “rebackErrMsg”)。同时在该类里面生成rebackErrMsg方法。
@Service
public class RibbonTestService {
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "rebackErrMsg")
public String getServicePort() {
return restTemplate.getForObject("http://clientService/pls",String.class);
}
@Value("${server.port}")
String port;
public String rebackErrMsg() {
return "This service has been broke:" + port;
}
}
启动springcloud-ribbon,并停止clientService服务可验证。
二:feign实现 Hystrix 熔断:
feign集成了Hystrix ,但他没有显示开启。需要手动开启(高版本有自动开启)。springcloud-feign操作如下
1:在application.yml手动开启。
feign:
hystrix:
enabled: true
2.:服务消费用指定fallback调用的类。同时该类需要implements该feign消费服务接口。
//申明feign调用的服务名,
@FeignClient(value = "http://clientService",fallback=GetServerPortImpl.class)
public interface GetServerPort {
//服务方法指定
@RequestMapping("/pls")
String callClient();
}
3.创建fallback类并implements接口,并@Component 注解决,否则会报错。
@Component
public class GetServerPortImpl implements GetServerPort {
@Override
public String callClient() {
// TODO Auto-generated method stub
return "Server has broke!";
}
}
4.启动springcloud-feign,可看效果