问题标签 [retrywhen]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1525 浏览

java - Spring WebClient - 如何根据响应标头延迟重试

一点背景

我一直在学习 Spring Webflux 和响应式编程,但遇到了一个我试图解决的问题,我试图使用 Spring Webclient 解决重试逻辑。我创建了一个客户端并成功调用了一个返回一些 JSON 数据的外部 Web 服务 GET 端点。

问题

当外部服务以503 - Service Unavailable状态响应时,响应包含一个Retry-After带有值的标头,该值指示在重试请求之前我应该​​等待多长时间。我想在 Spring Webflux/Reactor 中找到一种方法来告诉 webClient 在 X 周期之后重试它的请求,其中 X 是现在和我从响应标头中解析出来的 DateTime 之间的差异。

简单的 WebClient GET 请求

网络客户端生成器

我使用构建器创建webClient上述方法中使用的变量,并将其作为实例变量存储在类中。

何时重试

我试图理解并使用该类的retryWhen方法Retry,但不知道我是否可以访问或传递那里的响应标头值。

具有额外逻辑和数据库交互的过滤器

我还尝试使用 WebClient.Builder 执行一些额外的逻辑并使用过滤器,但这只会让我停止新请求(调用#get),直到之前建立的 Retry-After 值已经过去。

感谢任何帮助,如果我能提供更多的上下文数据来提供帮助,我会的。

0 投票
2 回答
295 浏览

python - python selenium 网页抓取。如何在网络中断或抓取的网站速度慢时继续重试?

我正在尝试在 python 中使用 selenium 从网络上抓取一张表。但是网站速度很慢,而且大部分时间都有很多网络问题。因此,即使网站需要时间加载,我也希望代码继续尝试。我必须抓取 941 个条目才能抓取。我尝试了我在网上找到的名为 retry 的模块,但它似乎不起作用。给出下面的代码示例。有没有其他方法可以让代码在网站加载之前不断重试?

0 投票
1 回答
57 浏览

spring-boot - WebFlux 重试之上的速率限制

WebFlux 重试之上的速率限制

我想限制 WebFlux 的退休人数。用例是,如果要调用的服务出现故障,那么我最终会重试所有读取超时,这反过来又会造成双倍的负载。我想出了一种方法来编写自定义方法来检查重试的可行性,但这看起来更像是一种 hack。对于这个用例,有什么更简洁的方法可以遵循吗?

0 投票
1 回答
214 浏览

angular - 重试后没有调用catchError

我对 Rxjs 有点陌生。我想要做的是调用 API 5 次,但如果 5 次请求仍然失败,则向我的组件返回自定义错误值。但不知何故它没有达到catchError。

0 投票
2 回答
55 浏览

kotlin - RxJava 的 retryWhen 意外地一直重试

任何人都可以……</p>

  1. 解释为什么下面的代码会无限期地重试,一旦retryWhen被调用?
  2. Random.nextBoolean() 更正代码以在返回时停止重试true

我认为有 50% 的机会retryWhen因为Random.nextBoolean(). 但是,一旦调用它,它就会进入无限循环。

输出:

0 投票
0 回答
107 浏览

java - WebClient 使用不同的 URL 重试

我正在使用 webClient 进行其余调用,我需要的是,如果主 URL 因特定错误代码而失败,请使用辅助 URL 重试下一次。请在下面找到我正在使用的逻辑的示例代码。但是,一旦创建了客户端,我们似乎就无法更改 URL,即使我更改了 URL,它也不会生效,并且仍然会向初始 URL 发起请求。

0 投票
1 回答
102 浏览

android - 如果响应不成功,RXJava 重复请求并继续流

我需要向网络服务器发出请求,服务器通常会返回我在流中使用的参考代码。但有时服务器很忙并返回一个错误,表明它很忙,所以我必须在片刻后重试。

我想要实现的是,如果该方法返回错误,则在一段时间后重试对 getReferenceCode() 的调用。这可以使用 RxJava 运算符实现吗?

谢谢

0 投票
2 回答
141 浏览

javascript - 重试,然后忽略错误并获取源值 rxjs

错误或没有错误,我想在重试后进入订阅成功处理程序。要进行测试,请注释掉 setTimeout 行。这将使 checkforText$ 总是抛出错误。我想忽略最后的错误,仍然将编辑器返回给订阅成功处理程序。

https://codepen.io/Spankid/pen/gOgVZEE

找到文本时输出(setTimeout 未注释掉):

找不到文本时的目标输出(注释掉 setTimeout):

未找到文本时的实际输出(注释掉 setTimeout):

我尝试在 retryWhen 之后添加 catchError,希望将其变成订阅成功处理程序。但它仍然没有。有任何想法吗?

0 投票
0 回答
22 浏览

android - rxjava 不触发时重试

我正在使用 Web API 来检索一些报告。首先,我必须发送一个请求以获取参考代码,并使用该代码发出第二个请求以获取报告。问题是,当报告太大时,需要一些时间来准备,因此服务器会返回警告/错误,指示我必须稍后检查。

因此,每当我从以前的平面图中收到警告或错误时,我都会尝试重复第二个请求,但它似乎不起作用。有任何想法吗?

0 投票
1 回答
27 浏览

rx-java - RxJava - 在错误 Observable 的父 Observable 上使用 retryWhen

我的服务正在与 couchbase 合作。当我想更新文档时,首先该服务执行查找并使用 CAS 获取文档,然后更新文档。如果更新因 CASMismatch 异常而失败,我想在查找(异步请求)上执行延迟重试(重试时间)并更新。问题是重试仅调用可观察的更新,而不是整个查找和更新异步请求。

这是重试代码:

更新代码: