1. 程式人生 > >spring cloud(七):Hystrix的應用

spring cloud(七):Hystrix的應用

hystrix java 微服務

1、概念

熔斷器,容錯管理工具,旨在通過熔斷機制控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。除了熔斷的功能還有服務降級、線程和信號隔離、請求緩存、請求合並以及服務監控等強大功能。

2、集成

a、工程的 pom.xml 的 dependency 節點中引入 spring-cloud-starter-hystrix 依賴:

<dependency>

  <groupId>org.springframework.cloud</groupId>

  <artifactId>spring-cloud-starter-hystrix</artifactId>

</dependency>

b、在啟動類中通過註解@EnableCircuitBreaker ,啟動熔斷器

/**

* 使用@EnableCircuitBreaker註解開啟斷路器功能

* @author eacdy

*/

@SpringBootApplication

@EnableDiscoveryClient

@EnableCircuitBreaker

public class HystrixApplication {

/**

* 實例化RestTemplate,通過@LoadBalanced註解開啟均衡負載能力.

* @return restTemplate

*/

@Bean

@LoadBalanced

public RestTemplate restTemplate() {

return new RestTemplate();

}


public static void main(String[] args) {

SpringApplication.run(HystrixApplication.class, args);

}

}

c、編寫服務類,寫個回退方法,通過命令模式,指定發生異常需要回退的方法

@Service

public class HystrixService {

@Autowired

private RestTemplate restTemplate;

private static final Logger LOGGER = LoggerFactory.getLogger(RibbonHystrixService.class);


@HystrixCommand(fallbackMethod = "fallback")

public User findById(Long id) {

return this.restTemplate.getForObject("http://microservice-provider-user/" + id, User.class);

}


public User fallback(Long id) {

User user = new User();

user.setId(-1L);

user.setUsername("default username");

user.setAge(0);

return user;

}

}

d、編寫控制器類,調用服務類

@RestController

public class HystrixController {

@Autowired

private HystrixService hystrixService;


@GetMapping("/ribbon/{id}")

public User findById(@PathVariable Long id){

return this.hystrixService.findById(id);

}

}

e、編寫application.yml

server:

port: 9413

spring:

application:

name: microservice-hystrix

eureka:

client:

serviceUrl:

defaultZone: http://discovery:8761/eureka/

instance:

hostname: hystrix

3、啟動應用,同時啟動兩個相同的應用,只是端口不同,訪問http://hystrix:9413/hystrix/1,則正常顯示內容,當把服務設置超時,則會調用回退方法。

4、總結

熔斷器有效的解決了因為服務故障,請求積壓,導致服務崩潰,同時提高了用戶的體驗;上面的集成是使用了熔斷器的命令模式,如果項目裏面用的是feign,則自帶了回退機制,不過個人推薦還是用命令模式,參數設置靈活,api更強大。

spring cloud(七):Hystrix的應用