问题标签 [java-failsafe]
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.
java - Apache HttpClient:重试失败安全结果为 400(错误请求)
我正在使用 ApacheHttpClient
和Failsafe java 库。下面是(伪)代码的样子:
它正在调用一个测试端点,localhost
我已经模拟了它来执行以下操作:
- 前 3 个请求返回 404
- 第 4 个请求返回 200
现在,当我执行上面的代码时,我看到了以下行为:
- HttpClient发送
get
请求,结果为404 - 作为响应
404
,重试策略启动并重试请求 - 重试请求失败,
400
没有实际到达代理 - 所有随后的重试都失败了
400
。响应没有任何正文
我希望第 2 步中的请求能够命中我的模拟,但是,它没有命中就失败了。是否HttpClient
缓存响应或尝试阻止后续重试?
java - 为什么 CopyOnWriteArrayList 需要用于写入和读取操作的副本?
来自这篇文章,它说:
当我们使用任何修改方法时——例如 add() 或 remove()——CopyOnWriteArrayList 的全部内容被复制到新的内部副本中。
由于这个简单的事实,我们可以以安全的方式迭代列表,即使发生并发修改。
当我们在 CopyOnWriteArrayList 上调用 iterator() 方法时,我们会返回一个由 CopyOnWriteArrayList 内容的不可变快照备份的迭代器。
它的内容是创建迭代器时 ArrayList 中数据的精确副本。即使同时其他线程从列表中添加或删除元素,该修改也会制作数据的新副本,该副本将用于从该列表中进行任何进一步的数据查找。
接下来要问自己的一个简单问题是为什么两者兼而有之?基本上,据我了解,写操作是在新副本上进行的,而读操作是在集合的克隆上进行的。
例如,如果在新副本上完成写入,这意味着我可以迭代“原始”集合——这意味着它不会受到影响。那么为什么要在另一个副本(快照)中增加存储元素的开销呢?或者相反的方向,如果我将元素存储在副本(快照)中,为什么需要在副本上完成写入,当我从字面上迭代克隆而不是“原始”集合时(意味着快照永远不会改变)?
我希望这个问题是合法的,因为我确实检查了互联网上所有可能的来源,但没有一篇文章帮助我消除这种困惑。我在这里想念什么?
java - Failsafe : 执行 void 方法并根据成功/失败返回结果
我正在使用Failsafe
框架(链接)来执行一个方法。我的用例是执行一个void
方法 x 次并根据执行结果返回success
or 。failure
下面是我的(伪)代码的样子:
我可以使用run
方法Failsafe
来执行我的 void 方法(即methodThatNeedsToExecute()
)。但是,如何根据重试执行的方式返回某些内容?
java - 如何从 Java 中的 FailSafe Jodah 方法抛出异常?
我想从 FailSafe 方法中抛出异常 (Jodah)
但似乎不可能从 Failsafe Jodah 方法中抛出这样的异常。怎么做?
java - 如果使用重试策略的前 3 次尝试重试失败,如何使用新的访问令牌重试
我正在尝试通过 FailSafe 调用来做到这一点,但我不确定是否有更好的方法或者这种方法是否不正确
并使用以下代码调用其余部分,但我不确定如何传递刷新的访问令牌。
我应该如何添加以处理新令牌。
java - Failsafe:是否可以执行功能用它?
我正在使用 net.jodah.failsafe 框架。
从我在教程中发现,Failsafe 可以执行 Runnable 和 Supplier。
是否有任何 API 来执行功能?我需要它,因为我想使用 Failsafe 运行的方法应该同时:接收参数并返回一些值。
如果没有,是否有任何解决方法?我唯一想到的是将参数存储为私有字段,在这种情况下,方法不需要接收参数。像这样:
而不是:
做这个:
也许有更优雅的解决方案?