当前位置: 首页 > 知识库问答 >
问题:

Spring Cloud Consul客户端不会忽略关键服务

乜建柏
2023-03-14

我已经实现了一个基于Spring Cloud的应用程序,该应用程序具有以下主要体系结构。网关服务委托给多个服务实例。我使用领事进行服务发现。网关服务按以下方式实现:

@EnableDiscoveryClient
@SpringBootApplication
public class GatewayApplication {

  public static void main(String[] args) {
    SpringApplication.run(ApiGatewayApplication.class, args);
  }

  @Bean
  @LoadBalanced
  public WebClient.Builder loadBalancedWebClientBuilder() {
    return WebClient.builder();
  }

  @RestController
  static class GateWayController {

    private final WebClient.Builder webClientBuilder;

    @Data
    @NoArgsConstructor
    private static class Response {
      private String message;
      private String appName;
      private int port;
    }

    @Autowired
    public GateWayController(WebClient.Builder webClientBuilder) {
      this.webClientBuilder = webClientBuilder;
    }

    @GetMapping("/lbhello")
    public Mono<Response> hello() {
      return webClientBuilder.build()
                             .get()
                             .uri("lb://hello-service/hello")
                             .retrieve()
                             .bodyToMono(Response.class);
    }
  }
}

spring cloud starter consul discoverySpringCloud StarterLoadBalancer作为依赖项包含在pom.xml。在<code>应用程序中。yamlI只在应用程序中设置。命名并禁用功能区,以便使用Spring Cloud Loadbalancer。当我启动<code>网关服务

当<code>HelloService

这是领事的预期行为吗?如果答案是肯定的,是否有Spring Cloud设置来适应这种行为?

共有1个答案

皇甫雨石
2023-03-14

默认情况下,Spring Cloud<code>ConsultDiscoveryClient<code>加载所有服务实例,而不管它们的健康状态如何。可以通过以下配置设置更改此行为:

spring.cloud.consul.discovery.query-passing = true

通过此设置,请求不会在延迟一段时间后委托给不健康的实例。

 类似资料:
  • 我的库需要连接到任意的AWS-IoT帐户,因此我在实例化AWS客户端时传递所需的凭据: 根据boto3文档(摘录如下),以这种方式传递的凭据应该覆盖所有其他凭据。然而,此调用从Boto3生成以下日志消息: 我真的不希望boto3拾取用户可能在他们的系统上配置的任何凭据——我希望它只使用我传递给boto3.client()的凭据。有什么想法如何确保这一点? 两份文件摘录:

  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • 我的异步方法有问题。它工作正常,但线程数一直在增加。 下面是我的代码示例: 位于GitHub的完整项目:https://github.com/rublin/KarboMarketplaceExplorer 直接链接到类 下面是一个测试,涵盖了这种行为。

  • 问题内容: 我目前在服务器具有默认的自签名SSL证书的测试环境中工作。我正在使用Restlet 2.1-RC2并实例化客户端资源,如下所示: 并在每次打来的电话中重复使用客户端。如何设置客户端,使其忽略有问题的证书。 问题答案: 正确的方法 是使用以下 方法 将此自签名证书导入客户端的信任库: 您可以直接在可能缺乏灵活性的JRE信任库()中进行操作,也可以在自己的文件副本中进行操作,然后将该文件设

  • 问题内容: 我正在使用Jersey客户端库针对在jboss上运行的rest服务运行测试。我使用自签名证书在服务器(在本地主机上运行)上设置了https。 但是,每当我使用https url运行测试时,都会出现以下错误: 我知道这是因为我的自签名证书不在Java密钥库中。有什么办法可以让我不检查ssl证书的有效性,而直接使用它呢? 这段代码只能在测试服务器上运行,因此,我不想在每次设置新的测试服务器

  • 我在使用eureka进行客户端负载平衡时遵循了spring指南: https://spring.io/guides/gs/client-side-load-balancing/ 但是当我关闭了3个服务器实例中的任何一个后,我得到了一个连接拒绝异常。客户端仍然试图向这些服务器发送请求,而不是忽略未通过ping的服务器。当这些服务器被ping时,我会得到一个异常,当客户端试图向这些服务器发送请求时,也