Spring 云负载均衡器 - 带有健康检查/重试的 Feign + SimpleDiscoveryClient

Posted

技术标签:

【中文标题】Spring 云负载均衡器 - 带有健康检查/重试的 Feign + SimpleDiscoveryClient【英文标题】:Spring cloud loadbalancer - Feign + SimpleDiscoveryClient with healthcheck/retry 【发布时间】:2021-10-08 11:26:32 【问题描述】:

升级 Spring Cloud 版本后,我正在努力从 Ribbon 切换到 Spring Cloud Loadbalancer。 使用 Feign 设置 SimpleDiscoveryClient 很容易。 但是 simplediscovery 客户端“太简单了”。 我想至少添加一个运行状况检查,这样它就不会使用可能已关闭的实例,最好也是重试机制。 我已经一遍又一遍地阅读文档,但找不到简单的设置方法。

https://docs.spring.io/spring-cloud-commons/docs/current/reference/html/#instance-health-check-for-loadbalancer 我找到了这个用于健康检查的示例自定义配置,但它不起作用。

public class CustomLoadBalancerConfiguration 

@Bean
public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(
        ConfigurableApplicationContext context) 
    return ServiceInstanceListSupplier.builder()
                .withDiscoveryClient()
                .withHealthChecks()
                .build(context);
    

如果我按原样运行它,它会引发以下缺失 bean 错误: XXX.CustomLoadBalancerConfig 中的方法 discoveryClientServiceInstanceListSupplier 需要一个找不到的 'org.springframework.web.client.RestTemplate' 类型的 bean。

谁能给我一些关于如何使它工作或如何复制功能区行为的指示?

【问题讨论】:

【参考方案1】:

在您的配置中添加以下 RestTemplate Bean。

@Bean
public RestTemplate restTemplate() 
    return new RestTemplate();

【讨论】:

以上是关于Spring 云负载均衡器 - 带有健康检查/重试的 Feign + SimpleDiscoveryClient的主要内容,如果未能解决你的问题,请参考以下文章

如何调试失败的 AWS 弹性负载均衡器健康检查

系统架构之负载均衡

有没有办法在没有负载均衡器的情况下为 ECS 服务配置健康检查?

云服务器 ECS 实战一文掌握负载均衡服务原理及配置方法

阿里云负载均衡产品简介

Spring Cloud——分布式spring应用如何获得重试、负载均衡和断路器的好处