1. 程式人生 > >微服務springcloud—Feign使用Hystrix和為Feign添加回退

微服務springcloud—Feign使用Hystrix和為Feign添加回退

Feign使用Hystrix

前文中使用註解@HystrixCommand的fallbackMethod屬性實現回退的。然而,Feign是以介面形式工作的,他沒有方法體,前文講解的方式顯然不適合Feign。
那麼Feign要如何整合Hystrix呢?不僅如此,如何實現Feign的回退呢?

事實上,Spring Cloud預設已為Feign整合了Hystrix,只要Hystrix在專案的classpath
中,Feign預設就會斷路器包裹所有方法。下面來詳細探討如何實現Feign的回退。

為Feign添加回退

1.複製專案microservice-consumer-movie-feign,將ArtifactId修改為microservice-consumer-movie-feign-hystrix-fallback。

2.將之前編寫的Feign介面修改成如下內容

/**
 * Feign的fallback測試
 * 使用@FeignClient的fallback屬性指定回退類
 */
@FeignClient(name="users", fallback = FeignClientFallback.class)
public interface UserFeignClient {
    @RequestMapping(value ="/{id}",method = RequestMethod.GET)
    public User findById(@PathVariable("id") Long id)
; } /** * 回退類FeignClientFallback需事先Feign Client介面 * FeignClientFallback也可以是public class,沒有區別 */ @Component class FeignClientFallback implements UserFeignClient { @Override public User findById(Long id){ User user = new User(); user.setId(-1L); user.setUsername("預設使用者"
); return user; } }

3.測試

1.啟動microservice-discovery-eureka。
2.啟動microservice-provider-user。
3.啟動microservice-consumer-movie-feign-hystrix-fallback。
4.訪問http://localhost:8010/user/1,可正常獲得結果。
5.停止microservice-provider-user。
6.再次訪問http://localhost:8010/user/1,可獲得如下結果。說明當使用者微服務不可用時,進入回退的邏輯。
在這裡插入圖片描述

本文大部分內容轉載自周立的《Spring Cloud與Docker微服務架構實戰》