電子商務平臺源碼請加企鵝求求:三五三六二四七二五九。SpringCloud整合Hystrixweb
因爲服務調用者有可能調用服務掛掉的提供者,服務調用方整合Hystrixspring
引入依賴bash
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
複製代碼
主啓動開啓斷路器框架
@SpringBootApplication
@EnableEurekaClient
//開啓斷路器
@EnableCircuitBreaker
public class SaleApp {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
new SpringApplicationBuilder(SaleApp.class).web(true).run(args);
}
}
複製代碼
服務調用service修改ui
@Service
//對這個類採用全局默認的回退機制,回退方法不能帶參數,例如:「getMemberFallback」沒有參數
//@DefaultProperties(defaultFallback = "getMemberFallback")
public class MemberService {
@Autowired
private RestTemplate restTpl;
//一、@HystrixCommand、@HystrixProperty這些註解不是SpringCloud註解,而是Hystrix框架提供的
//二、fallbackMethod當修飾具體方法時,fallbackMethod方法的參數和修飾方法保持一致
@HystrixCommand(fallbackMethod = "getMemberFallback", groupKey = "MemberGroup", commandKey = "MemberCommandKey",
commandProperties = {
//超時熔斷
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
}, threadPoolProperties = {
@HystrixProperty(name = "coreSize", value = "2")
})
public Member getMember(Integer id) {
try {
Thread.sleep(500);
} catch (Exception e) {
}
Member member = restTpl.getForObject(
"http://spring-hy-member/member/{id}", Member.class, id);
return member;
}
public Member getMemberFallback(Integer id) {
Member m = new Member();
m.setId(1);
m.setName("error member");
return m;
}
}
複製代碼
注意: @DefaultProperties:能夠配置全局回退機制,回退方法不能帶參數,例如:「getMemberFallback」沒有參數 @HystrixCommand、@HystrixProperty這些註解不是SpringCloud註解,而是Hystrix框架提供的 fallbackMethod當修飾具體方法時,fallbackMethod方法的參數和修飾方法保持一致spa