标签: retry-logic

使用指数退避有什么好处?

当代码等待延迟时间不确定的某种情况时,看起来很多人选择使用指数退避,即等待N秒,检查条件是否满足; 如果没有,等待2N秒,检查条件等.这对于检查恒定/线性增加的时间跨度有什么好处?

linear-programming non-deterministic exponential-backoff retry-logic

15
推荐指数
3
解决办法
3833
查看次数

重试 HTTP 请求(Java 11 - HttpClient)

问题

使用HttpClientJava 11(JDK,而不是 Apache),如何重试请求?

假设我想重试一个请求最多10 次,如果它没有返回状态代码200抛出异常。


试图

目前,我正在循环中重新安排返回的未来,我想知道是否有更好或更优雅的方式。

CompletableFuture<HttpResponse<Foo>> task = client.sendAsync(request, bodyHandler);

for (int i = 0; i < 10; i++) {
    task = task.thenComposeAsync(response -> response.statusCode() == 200 ?
        CompletableFuture.completedFuture(response) :
        client.sendAsync(request, bodyHandler));
}

// Do something with 'task' ...
Run Code Online (Sandbox Code Playgroud)

如果我们也为特殊情况添加重试,我最终会得到

CompletableFuture<HttpResponse<Foo>> task = client.sendAsync(request, bodyHandler);

for (int i = 0; i < 10; i++) {
    task = task.thenComposeAsync(response ->
            response.statusCode() == 200 ?
            CompletableFuture.completedFuture(response) :
            client.sendAsync(request, bodyHandler))
        .exceptionallyComposeAsync(e -> …
Run Code Online (Sandbox Code Playgroud)

java http request retry-logic java-http-client

12
推荐指数
1
解决办法
2万
查看次数

如何使用hystrix重试

我有一个封装REST调用的hystrix命令.如果发生故障(例如超时),我想进行单次重试,如果发生故障,则返回适当的错误.

我可以看到Hystrix不支持重试.使用Hystrix的唯一方法是将主逻辑放入getFallback()方法.但它看起来并不正确.

那么,用hystrix实现超时的正确方法是什么?

java hystrix retry-logic

10
推荐指数
1
解决办法
8840
查看次数

Spring@Retryable用于特定条件

是否可以根据某些条件重试?如果我用Retryable注释,它会根据一些异常重试,但我想在捕获该异常并且满足相应条件时重试。例子:

@Retryable(value={MyException.class},maxAttempts=2)
public myMethod(Request request){

    try{
        doSomething();
    } Catch(Exception ex){
        throw new MyException();
    }

}
Run Code Online (Sandbox Code Playgroud)

在上面的请求中,我有一个标志isRetryRequired如果这是 true 并且 MyException 被捕获那么我想重试

java spring spring-retry retry-logic

9
推荐指数
1
解决办法
5070
查看次数

使用 Polly 库实现重试逻辑,不重复处理异常

如何使用 polly 实现重试逻辑,以在有一定延迟的情况下永远重试执行函数,但不处理异常。该场景是重复获取状态信息但没有预期的异常。

c# polly retry-logic

9
推荐指数
2
解决办法
5132
查看次数

重试URLSession dataTask的模式?

我是iOS/Swift开发的新手,我正在开发一个向REST API提出多个请求的应用程序.以下是检索"消息"的其中一个调用的示例:

func getMessages() {

    let endpoint = "/api/outgoingMessages"

    let parameters: [String: Any] = [
        "limit" : 100,
        "sortOrder" : "ASC"
    ]

    guard let url = createURLWithComponents(endpoint: endpoint, parameters: parameters) else {
        print("Failed to create URL!")
        return
    }

    do {
        var request = try URLRequest(url: url, method: .get)

        let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in

            if let error = error {
                print("Request failed with error: \(error)")
                // TODO: retry failed request
            } else if let …
Run Code Online (Sandbox Code Playgroud)

ios nsurlsession swift nsurlsessiondatatask retry-logic

7
推荐指数
2
解决办法
4324
查看次数

Elasticsarch:使用单个节点执行重试

我正在使用 NEST 对 Elasticsearch 6 集群执行查询。Elasticsearch 集群由几个节点组成,但它在防火墙/负载均衡器后面运行,因此从客户端角度来看,它显示为具有单个主机名的单个节点。

当部署我的应用程序的新版本时,由于基础设施/网络在蓝绿部署方面的工作方式,会出现短暂的网络中断。

由于我只有一个 Elasticsearch URI,因此当我创建连接时,NEST 将使用 SingleNodeConnectionPool 实例。我在文档 2 中读到,在这种情况下,NEST 将不会执行任何重试。

但就我而言,我想执行重试来处理上述网络中断,因为它当前会导致错误传播到最终用户。我知道我可以自己实现重试逻辑,但我想知道是否有某种方法可以获取网络连接错误的重试逻辑,即使在使用 SingleNodeConnectionPool 时也是如此。

我的代码中出现的错误是:

System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机未能响应而建立的连接失败:

elasticsearch nest retry-logic

7
推荐指数
0
解决办法
253
查看次数

Go中如何自定义http.Client或http.Transport超时重试?

我想实现http.Transport标准的自定义http.Client,如果客户端超时,它将自动重试。

PS 出于某种原因,定制http.Transport必须具备的。我已经检查过hashcorp/go-retryablehttp,但是它不允许我使用我自己的http.Transport.

这是我的尝试,自定义组件:

type CustomTransport struct {
    http.RoundTripper
    // ... private fields
}

func NewCustomTransport(upstream *http.Transport) *CustomTransport {
    upstream.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
    // ... other customizations for transport
    return &CustomTransport{upstream}
}

func (ct *CustomTransport) RoundTrip(req *http.Request) (resp *http.Response, err error) {
    req.Header.Set("Secret", "Blah blah blah")
    // ... other customizations for each request

    for i := 1; i <= 5; i++ {
        resp, err = ct.RoundTripper.RoundTrip(req)
        if errors.Is(err, …
Run Code Online (Sandbox Code Playgroud)

error-handling timeout http go retry-logic

6
推荐指数
1
解决办法
7417
查看次数

如何使用请求库在 python 中测试重试尝试

我有以下内容:

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

retry_strategy = Retry(
    total=3,
    status_forcelist=[429, 500, 502, 503, 504],
    method_whitelist=["HEAD", "GET", "OPTIONS"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
http = requests.Session()
http.mount("https://", adapter)
http.mount("http://", adapter)

response = http.get("some_endpoint")
Run Code Online (Sandbox Code Playgroud)

如何有效地进行单元测试,让我重试 N 次(在本例中为 3 次)?

python python-unittest retry-logic

6
推荐指数
1
解决办法
2026
查看次数

设置 AWS 开发工具包 JavaScript V3 重试的 customBackoff

我刚刚升级到 AWS SDK V3,我不知道如何使用它配置 retryDelayOptions 和 customBackoff。我在AWS自己的API参考或网上找不到任何示例代码。这就是我之前所做的:

retryDelayOptions: { customBackoff: (retryCount) => 2 ** (retryCount * 100) },
maxRetries: 2
Run Code Online (Sandbox Code Playgroud)

我将上述内容作为选项传递给客户端构造函数。V3 的重试似乎发生了很大变化,如果没有任何示例,我无法理解 API。任何帮助深表感谢

问候,迪帕克

javascript amazon-web-services exponential-backoff retry-logic aws-sdk-js-v3

6
推荐指数
1
解决办法
2846
查看次数