引入依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-core</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-openfeign-core</artifactId> <version>2.0.1.BUILD-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>LATEST</version> </dependency> </dependencies>
启动类:
@EnableFeignClients(basePackages = "club.cearnach") @SpringCloudApplication @ComponentScan(basePackages = "club.cearnach") public class OrderServerApplication { public static void main(String[] args) { SpringApplication.run(OrderServerApplication.class, args); } }
声明一个Client , fallback指定要回滚的实现类.
@FeignClient(name = "PRODUCT-SERVER", fallback = ProductClient.ProductClientFallback.class) public interface ProductClient { @GetMapping("/product/list") String productList(@RequestParam("msg") String msg); /** * 回滚事件,需要实现要回滚的对象接口 */ @Slf4j @Component class ProductClientFallback implements ProductClient { @Override public String productList(String msg) { String info = "productList fallback()"; log.info(info); return info; } } }
在另外一个模块中引用该Client所在的模块.
然后直接注入即可使用.
@Autowired private ProductClient productClient; /** * HystrixCommand(fallbackMethod = "fallback") 指定单FeignClient不可用或者执行时抛出异常,需要回滚的方法 * * @return */ @GetMapping("/feign/list") @HystrixCommand(fallbackMethod = "fallback") public String feignList() { return productClient.productList("Fetch feign msg..."); } public String fallback() { return "invoke fallback()"; }