Spring cloud b2b2c電子商務社交平臺源碼請加企鵝求求:一零三八七七四六二六。在開始使用Spring Cloud Hystrix實現斷路器以前,咱們先拿以前實現的一些內容做爲基礎,其中包括:web
eureka-server
工程:服務註冊中心,端口:1001eureka-client
工程:服務提供者,兩個實例啓動端口分別爲2001下面咱們能夠複製一下以前實現的一個服務消費者:eureka-consumer-ribbon
,命名爲eureka-consumer-ribbon-hystrix
。下面咱們開始對其進行改在:spring
第一步:pom.xml
的dependencies節點中引入spring-cloud-starter-hystrix
依賴:bash
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>複製代碼複製代碼 |
第二步:在應用主類中使用@EnableCircuitBreaker
或@EnableHystrix
註解開啓Hystrix的使用:app
@EnableCircuitBreaker
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}複製代碼複製代碼 |
注意:這裏咱們還可使用Spring Cloud應用中的@SpringCloudApplication
註解來修飾應用主類,該註解的具體定義以下所示。咱們能夠看到該註解中包含了上咱們所引用的三個註解,這也意味着一個Spring Cloud標準應用應包含服務發現以及斷路器。函數
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public @interface SpringCloudApplication {
}複製代碼複製代碼 |
第三步:改造服務消費方式,新增ConsumerService
類,而後將在Controller
中的邏輯遷移過去。最後,在爲具體執行邏輯的函數上增長@HystrixCommand
註解來指定服務降級方法,好比:post
@RestController
public class DcController {
@Autowired
ConsumerService consumerService;
@GetMapping("/consumer")
public String dc() {
return consumerService.consumer();
}
class ConsumerService {
@Autowired
RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "fallback")
public String consumer() {
return restTemplate.getForObject("http://eureka-client/dc", String.class);
}
public String fallback() {
return "fallback";
}
}
}複製代碼複製代碼 |
下面咱們來驗證一下上面Hystrix帶來的一些基礎功能。咱們先把涉及的服務都啓動起來,而後訪問localhost:2101/consumer
,此時能夠獲取正常的返回,好比:Services: [eureka-consumer-ribbon-hystrix, eureka-client]
。ui
爲了觸發服務降級邏輯,咱們能夠將服務提供者eureka-client
的邏輯加一些延遲,好比:spa
@GetMapping("/dc")
public String dc() throws InterruptedException {
Thread.sleep(5000L);
String services = "Services: " + discoveryClient.getServices();
System.out.println(services);
return services;
}複製代碼複製代碼 |
重啓eureka-client
以後,再嘗試訪問localhost:2101/consumer
,此時咱們將得到的返回結果爲:fallback
。咱們從eureka-client
的控制檯中,能夠看到服務提供方輸出了本來要返回的結果,可是因爲返回前延遲了5秒,而服務消費方觸發了服務請求超時異常,服務消費者就經過HystrixCommand註解中指定的降級邏輯進行執行,所以該請求的結果返回了fallback
。這樣的機制,對自身服務起到了基礎的保護,同時還爲異常狀況提供了自動的服務降級切換機制。rest
Spring cloud b2b2c電子商務社交平臺源碼請加企鵝求求:一零三八七七四六二六code