使用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]
文件 编辑 查看
@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
已经添加过了,依然还是不行
不知道你这个问题是否已经解决, 如果还没有解决的话:解决方案:
确保在配置文件(application.yml 或 application.properties)中开启了服务降级,下面是一个示例:
feign:
hystrix:
enabled: true
这将启用Feign的Hystrix支持,并在Feign客户端中启用服务降级。
创建一个实现Feign客户端的服务降级接口。如下所示,当服务无法访问时会返回一个默认的响应。
@Component
public class UserFeignFallback implements UserFeignClient {
@Override
public List<User> getUsers() {
return Collections.emptyList();
}
}
将服务降级实现类的实例传递给Feign客户端的fallback属性。这样,当调用服务出现问题时,将会使用服务降级实现类中的方法作为响应。
例如,在上面定义的UserFeignClient接口上使用fallback属性:
@FeignClient(name = "userservice", fallback = UserFeignFallback.class)
public interface UserFeignClient {
@RequestMapping(method = RequestMethod.GET, value = "/getusers")
List<User> getUsers();
}
这告诉Feign在无法连接到服务的情况下使用UserFeignFallback作为服务降级实现类。
测试服务降级是否正常工作。当服务无法访问时,使用fallback方法返回默认响应。
@RestController
public class UserController {
@Autowired
private UserFeignClient userFeignClient;
@GetMapping("/getusers")
public List<User> getUsers() {
return userFeignClient.getUsers();
}
}
当运行应用程序并访问http://userservice/getusers时,如果服务无法连接,则应该使用默认列表响应(从UserFeignFallback类中)。
希望这可以帮助解决您的问题。