首页 > 解决方案 > Spring Cloud:如果第一个请求失败,如何重试另一个服务

问题描述

我发现本指南解释了新的 spring-cloud-loadbalancer(netflix 的东西已弃用/在维护中)。

它准确地解释了我的用例。我需要在两个无法注册到 Euraka 的固定外部服务器之间进行客户端负载平衡。所以我也不能使用服务发现。

负载平衡工作正常,但如果对第一台服务器的请求失败,我需要重试。重试应该发送到第二个服务器。

但是负载平衡的 RestTemplate 只是选择由负载平衡确定的服务器(它使用虚拟循环,所以有时它会再次选择已经使用的服务器)。

      @Retryable(
      value = { RestClientException.class},
      maxAttempts = 2,
      backoff = @Backoff(delay = 0))
  public Response callApiEndpoint(Request request) {
        return loadBalancedRestTemplate.postForEntity("https://my-service/path", requestEntity,
            Response.class);
  }

关于这个的大多数教程都是指我不使用的 netflix 功能区。我还发现了一些实现我自己的 LoadBalancedRetryPolicy 的提示。

如果我使用新的 spring-cloud-loadbalancer 并且没有服务发现,如何再次使用不同的服务器进行重试?

标签: javaspring-bootload-balancingspring-cloud

解决方案


推荐阅读