Spring Cloud Feign 及 Hystrix 回滚

引入依赖

    <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()";
    }

猜你喜欢

转载自www.cnblogs.com/cearnach/p/9341593.html