问题标签 [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.

0 投票
1 回答
487 浏览

java - Apache HttpClient:重试失败安全结果为 400(错误请求)

我正在使用 ApacheHttpClientFailsafe java 库。下面是(伪)代码的样子:

它正在调用一个测试端点,localhost我已经模拟了它来执行以下操作:

  • 前 3 个请求返回 404
  • 第 4 个请求返回 200

现在,当我执行上面的代码时,我看到了以下行为:

  1. HttpClient发送get请求,结果为404
  2. 作为响应404,重试策略启动并重试请求
  3. 重试请求失败400 没有实际到达代理
  4. 所有随后的重试都失败了400。响应没有任何正文

我希望第 2 步中的请求能够命中我的模拟,但是,它没有命中就失败了。是否HttpClient缓存响应或尝试阻止后续重试?

0 投票
1 回答
196 浏览

java - 为什么 CopyOnWriteArrayList 需要用于写入和读取操作的副本?

来自这篇文章,它说:

当我们使用任何修改方法时——例如 add() 或 remove()——CopyOnWriteArrayList 的全部内容被复制到新的内部副本中。

由于这个简单的事实,我们可以以安全的方式迭代列表,即使发生并发修改。

当我们在 CopyOnWriteArrayList 上调用 iterator() 方法时,我们会返回一个由 CopyOnWriteArrayList 内容的不可变快照备份的迭代器。

它的内容是创建迭代器时 ArrayList 中数据的精确副本。即使同时其他线程从列表中添加或删除元素,该修改也会制作数据的新副本,该副本将用于从该列表中进行任何进一步的数据查找。

接下来要问自己的一个简单问题是为什么两者兼而有之?基本上,据我了解,写操作是在新副本上进行的,而读操作是在集合的克隆上进行的。

例如,如果在新副本上完成写入,这意味着我可以迭代“原始”集合——这意味着它不会受到影响。那么为什么要在另一个副本(快照)中增加存储元素的开销呢?或者相反的方向,如果我将元素存储在副本(快照)中,为什么需要在副本上完成写入,当我从字面上迭代克隆而不是“原始”集合时(意味着快照永远不会改变)?

我希望这个问题是合法的,因为我确实检查了互联网上所有可能的来源,但没有一篇文章帮助我消除这种困惑。我在这里想念什么?

0 投票
0 回答
128 浏览

java - Failsafe : 执行 void 方法并根据成功/失败返回结果

我正在使用Failsafe框架(链接)来执行一个方法。我的用例是执行一个void方法 x 次并根据执行结果返回successor 。failure下面是我的(伪)代码的样子:

我可以使用run方法Failsafe来执行我的 void 方法(即methodThatNeedsToExecute())。但是,如何根据重试执行的方式返回某些内容?

0 投票
0 回答
78 浏览

java - 如何从 Java 中的 FailSafe Jodah 方法抛出异常?

我想从 FailSafe 方法中抛出异常 (Jodah)

但似乎不可能从 Failsafe Jodah 方法中抛出这样的异常。怎么做?

0 投票
0 回答
35 浏览

java - 如果使用重试策略的前 3 次尝试重试失败,如何使用新的访问令牌重试

我正在尝试通过 FailSafe 调用来做到这一点,但我不确定是否有更好的方法或者这种方法是否不正确

并使用以下代码调用其余部分,但我不确定如何传递刷新的访问令牌。

我应该如何添加以处理新令牌。

0 投票
0 回答
28 浏览

java - Failsafe:是否可以执行功能用它?

我正在使用 net.jodah.failsafe 框架。

从我在教程中发现,Failsafe 可以执行 Runnable 和 Supplier。

是否有任何 API 来执行功能?我需要它,因为我想使用 Failsafe 运行的方法应该同时:接收参数并返回一些值。

如果没有,是否有任何解决方法?我唯一想到的是将参数存储为私有字段,在这种情况下,方法不需要接收参数。像这样:

而不是:

做这个:

也许有更优雅的解决方案?