1. 程式人生 > >springcloud系列17——Feign的Hystrix支援

springcloud系列17——Feign的Hystrix支援

Feign的Hystrix支援

如果Hystrix在類路徑上並且feign.hystrix.enabled = true,Feign將用斷路器包裝所有方法。

如果只是想某個Feign Client禁用Hystrix,可以建立一個普通的Feign.Builder,並將scope設定為prototype。

例如:

@Configuration
public class FooConfiguration {
    @Bean
    @Scope("prototype")
    public Feign.Builder feignBuilder() {
        return
Feign.builder(); } }

Feign Hystrix的回退(fallbacks)

Hystrix支援回退的概念:當斷路器開啟或出現錯誤時將執行預設的程式碼路徑。 要為給定的@FeignClient啟用回退,請將fallback屬性設定為實現回退的類名稱。 您還需要將您的實現宣告為Spring bean。

示例程式碼: 這裡以movie模組修改,新的模組名為microservice-springcloud-movie-feign-with-hystrix。

1.為Feign啟用hystrix

修改application.yml

feign:
  hystrix:
    enabled: true

2.編寫FeignClient,並設定fallbacks

@FeignClient(name = "microservice-springcloud-user",fallback = UserHystrixClientFallback.class)
public interface UserFeignClient {
    @RequestMapping(value = "/sample/{userId}", method = RequestMethod.GET)
    User findUserById(@PathVariable("userId") Long userId);
}

3.建立回退類

@Component
public class UserHystrixClientFallback implements UserFeignClient
{
    @Override
    public User findUserById(Long userId)
    {
        User user = new User();
        user.setId(0L);
        return user;
    }
}

4.測試

1.啟動Eureka Server; 2.啟動User服務; 3.啟動microservice-springcloud-movie-feign-with-hystrix。

啟動後,瀏覽器訪問/user/1,得到正確響應。將user服務關閉,連續重新整理20次以上,再次訪問得到的結果是user的id為0,即我們的Fallback類中實現的方法。結果與springcloud系列15——hystrix簡介及簡單程式碼示例一節的一致。

程式碼結構:

這裡要注意程式碼結構,否則在啟動時會出現一些問題。 應用啟動類如下:

@SpringBootApplication
@ComponentScan({"com.tommy.springcloud","com.tommy.config.fallback"})
@EnableFeignClients("com.tommy.config.feign")
public class MovieAppWithFeignAndHystrix
{
    public static void main( String[] args )
    {
        SpringApplication.run(MovieAppWithFeignAndHystrix.class,args);
    }
}

springboot掃描的類要與feign的分開。同時Fallback的類也要被springboot掃描到。