java - 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 并且没有服务发现,如何再次使用不同的服务器进行重试?
解决方案
推荐阅读
- c# - Azure Function 需要 hosts.json 日志记录,以便 Serilog 在日志流中工作
- java - Hibernate Criteria API 返回数据和子查询
- reactjs - 如何使用tailwind css动态更改下一个js中的边框颜色?
- memory - JavaScript 堆内存不足 - ng build
- java - 使用线程追加到文件仅在调试模式下同时工作
- c# - .NET Framework 4.8 中来自 AesCryptoServiceProvider 的 PlatformNotSupportedException
- unity3d - 为什么 Vision Lib 对我的 3d Modell 的跟踪不起作用并且相机的位置总是改变?
- c++ - 如何使用 MinGW 编译和使用库?
- javascript - 使用 getBoundingClientRect 保存和恢复元素位置不起作用
- dataweave - Dataweave 多级动态选择器