如何使用openfeign不能进行服务降级?(语言-java)

使用springboot3.0.6,使用openfeign4.0.2进行远程调用服务降级没有效果,正常远程调用是可以的,但是把服务器停掉后却不能调用服务降级。
报错:feign.FeignException$ServiceUnavailable: [503] during [GET] to [http://userservice/getusers] [UserCilent#getUsers()]: [Load balancer does not contain an instance for the service userservice]

img

 文件           编辑           查看
 @SpringBootApplication
 @EnableDiscoveryclient
 @EnableFeignclients
 public class BorrowserviceApplication
      public static void main(stringl]args){
            SpringApplication.run(BorrowserviceApplication.class,args)
 @component
 @Feignciient(name = "bookservice"fallback = Bookclientimpl.class)
 public interface Bookclient
            @GetMapping"/getbooks")
            public List<Book> getBooks()
            @GetMapping("/getbook/id")
            public Book getbook(@Pathvariable"id") int id)
 @component
 public class BookclientImpl implements Bookclient
      @override
      public List<Book> getBooks()
            return null;
      @override
      public Book getbook(int id)
      Y
            returnnewBook(e,我错了W);
 行33,列2

OpenFeign并不直接支持服务降级,但可以通过以下方式实现:

Hystrix:Hystrix是Netflix开源的一款容错框架,可以实现服务降级、熔断、限流等功能。在OpenFeign中,可以通过添加Hystrix依赖并配置FeignClient的fallback属性来实现服务降级。

Ribbon:Ribbon是Netflix开源的一款负载均衡框架,可以实现服务发现和负载均衡。在OpenFeign中,可以通过配置FeignClient的fallbackFactory属性来实现服务降级。

自定义实现:可以自定义实现服务降级的逻辑,例如在调用失败时返回默认值、记录日志等。

需要注意的是,服务降级并不是必须的,而是根据具体业务场景而定。在一些关键业务场景下,服务降级可以提高系统的可用性和稳定性。

yml feign熔断器开了么

feign:
  hystrix:
    enabled: true

已经添加过了,依然还是不行

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    解决方案:

    1. 确认openfeign配置文件

    确保在配置文件(application.yml 或 application.properties)中开启了服务降级,下面是一个示例:

    feign:
      hystrix:
        enabled: true
    

    这将启用Feign的Hystrix支持,并在Feign客户端中启用服务降级。

    1. 创建服务降级的实现类

    创建一个实现Feign客户端的服务降级接口。如下所示,当服务无法访问时会返回一个默认的响应。

    @Component
    public class UserFeignFallback implements UserFeignClient {
          @Override
          public List<User> getUsers() {
                return Collections.emptyList();
          }
    }
    
    1. 在Feign客户端上使用fallback属性

    将服务降级实现类的实例传递给Feign客户端的fallback属性。这样,当调用服务出现问题时,将会使用服务降级实现类中的方法作为响应。

    例如,在上面定义的UserFeignClient接口上使用fallback属性:

    @FeignClient(name = "userservice", fallback = UserFeignFallback.class)
    public interface UserFeignClient {
          @RequestMapping(method = RequestMethod.GET, value = "/getusers")
          List<User> getUsers();
    }
    

    这告诉Feign在无法连接到服务的情况下使用UserFeignFallback作为服务降级实现类。

    1. 测试服务降级

    测试服务降级是否正常工作。当服务无法访问时,使用fallback方法返回默认响应。

    @RestController
    public class UserController {
    
        @Autowired
        private UserFeignClient userFeignClient;
    
        @GetMapping("/getusers")
        public List<User> getUsers() {
            return userFeignClient.getUsers();
        }
    
    }
    

    当运行应用程序并访问http://userservice/getusers时,如果服务无法连接,则应该使用默认列表响应(从UserFeignFallback类中)。

    希望这可以帮助解决您的问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^