springcloud系列17——Feign的Hystrix支援
阿新 • • 發佈:2018-12-10
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掃描到。