Hystrix+Feign实现容错

hystrix主要用于消费端,如果消费端调用服务端接口失败了,那么会降级走自定义方法

代码在hystrix模块,服务端代码和之前没什么区别,controller多加了个方法,方法里面只抛个异常,用来演示服务端出错的情况

@RequestMapping("/error")
public String error() {
	throw new RuntimeException("失败");
}

在消费端,引入hystrix依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

启动类上加上@EnableCircuitBreaker注解
feign接口把服务端的报错接口也加上,并且在fallback配置自己的降级类

@FeignClient(value = "HYSTRIX-PROVIDER",fallback = UserSearchHystrix.class)
public interface UserSearchClient {

    @RequestMapping("/user-search/list")
    String list();

    /**
     * 调用报错接口
     */
    @RequestMapping("/user-search/error")
    public String error();
}

降级类实现

@Component
public class UserSearchHystrix implements UserSearchClient {
    public String list() {
        return "list -> hystrix";
    }

    public String error() {
        return "error -> hystrix";
    }
}

可以看到降级类实现了feign接口,并重写方法自定义降级逻辑,如果调用error方法失败的话,会返回自定义的字符串

controller直接调用就行了

/**
 * 服务接口报错,降级
 */
@RequestMapping("/error")
public String error() {
    return userSearchClient.error();
}

启动eureka server(8080),provider(8081),consumer(8082)
image.png
访问consumer的list和error接口,可以看到list接口正常返回,error返回了降级后的自定义字符串
image.png

error接口降级
image.png

源码:https://codox.coding.net/public/springcloud-learning/springcloud-learning/git/files

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×