在前面介紹spring cloud feign中咱們已經使用過hystrix,只是沒有介紹,spring cloud hystrix在spring cloud中起到保護微服務的做用,不會讓發生的異常無邊界的蔓延下去,很像咱們電路中的保險設置,有超壓或者線路有問題就即時的斷開,保護用電設備不被損壞,這篇文章就來介紹spring cloud hystrix及其hystrix dashboard。spring
(一) 版本說明瀏覽器
a) Spring boot 2.0.6.RELEASEapp
b) Spring cloud Finchley.SR2ide
c) Java version 1.8微服務
d) spring-cloud-starter-netflix-hystrix 2.0.2.RELEASEfetch
e) spring-cloud-starter-netflix-hystrix-dashboard 2.0.2.RELEASEurl
(二) 項目配置spa
1. 項目設置code
a) POM設置server
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>
eureka:
datacenter: ctm
environment: dev
instance:
hostname: 192.168.1.78
prefer-ip-address: true
ip-address: 192.168.1.129
lease-renewal-interval-in-seconds: 10
lease-expiration-duration-in-seconds: 30
instance-id: ${eureka.instance.ip-address}:${server.port}
client:
service-url:
defaultZone: http://${eureka.instance.hostname}:1001/eureka/,http://${eureka.instance.hostname}:1002/eureka/,http://${eureka.instance.hostname}:1003/eureka/
fetch-registry: true
register-with-eureka: true
healthcheck:
enabled: true
feign:
hystrix:
enabled: true
c) 主要參數說明
i. eureka.instance.prefer-ip-address 使用IP顯示註冊信息
ii. eureka.instance.ip-address 實例IP地址,
iii. eureka.instance.instance-id 自定義實例id,服務之間調用就是使用該配置,多個實例必須保證惟一性
iv. eureka.client.service-url.defaultZone 註冊中心地址
v. feign.Hystrix.enabled 在feign中其中熔斷器
d) 服務提供者API
@Value("${server.port}") private String getPort; @GetMapping(name = "index", value = "/index") public String Index() { return getPort; }
2. feign消費端項目配置
a) POM設置
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>
i. 這裏把服務消費端也註冊到了服務治理中心,消費者同時也是其它服務的提供者。
b) application.yml配置文件
eureka:
datacenter: ctm
environment: dev
instance:
hostname: 192.168.1.78
prefer-ip-address: true
ip-address: 192.168.1.129
lease-renewal-interval-in-seconds: 10
lease-expiration-duration-in-seconds: 30
instance-id: ${eureka.instance.ip-address}:${server.port}
client:
service-url:
defaultZone: http://${eureka.instance.hostname}:1001/eureka/,http://${eureka.instance.hostname}:1002/eureka/,http://${eureka.instance.hostname}:1003/eureka/
fetch-registry: true
register-with-eureka: true
healthcheck:
enabled: true
c) feign服務消費者API
@Configuration public class FeignConfig { @Bean public Retryer feignRetryer(){ return new Retryer.Default(100, TimeUnit.SECONDS.toMillis(1),3); } } @Component public class FallBackService implements FeignService { @Override public String Index() { return "hi,feign,error!"; } } @Component @FeignClient(name = "DEMOSERVICEIMPL",configuration = FeignConfig.class,fallback = FallBackService.class) public interface FeignService { @GetMapping(value = "/index") String Index(); }
i. FeignClient feign客戶端配置,這裏配置了服務名稱、重試規則、失敗回調,fallback 屬性就是熔斷器提供的功能,這點在後面的熔斷器看板中能夠更直觀的看到。
3. 項目運行
a) 運行服務提供者
i. 運行3個服務者實例後,會在服務中心看到以下效果,服務提供者已經註冊成功
b) feign運行服務消費者
i. 運行消費者,以下圖所示
c) 在瀏覽器中輸入消費者地址服務地址,便可看到以下效果
在看板地址中輸入http://192.168.1.129:1201/actuator/hystrix.stream,而後點擊Monitor Stream 按鈕,便可看到熔斷器監控,若是沒有數據顯示,能夠用任何客戶端調用幾回API,便可看到相似效果。
這樣spring cloud hystrix&hystrix dashboard就介紹完了,若是在開發中遇到問題,也能夠留言共同探討共同進步。