gpt4 book ai didi

java - 同步直到成功失败表达式不起作用

转载 作者:行者123 更新时间:2023-11-30 07:27:19 24 4
gpt4 key购买 nike

我在 Until-successful block 中有一个常规组件,它抛出 java.lang.IllegalArgumentException。在直到成功失败表达式中,我声明表达式 #[exception.causedBy(java.lang.IllegalArgumentException)]

现在理想情况下它应该是 True 并且重试应该只针对这个特定的异常发生,但它们也会针对每个异常发生。即使我通过'#[false]'手动将失败表达式设置为False,或者我设置一个变量并将其值与其本身进行比较(与变量本身不同的值进行比较),它仍然不起作用。

<until-successful maxRetries="5" millisBetweenRetries="600" failureExpression="[exception.causedBy(java.net.SocketTimeoutException)]" doc:name="Until Successful" synchronous="true">
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[throw new IllegalArgumentException()]]></scripting:script>
</scripting:component>
</until-successful>

我只是希望它重试特定异常,而对于其他异常,它应该抛出异常而不重试。

最佳答案

我猜您误解了 Until-Successful 范围如何与 FailureExpression 配合使用。

再次阅读文档 here ,此范围的工作原理如下:

  • 默认情况下,如果在“Until-Successful”中抛出任何异常,则“Until-Successful”会重试。因此,如果现在抛出异常,则无论有效负载或 header 的内容是什么,都不会尝试重试
  • 如果配置了 FailureExpression,则在抛出异常或 FailureExpression 计算结果为 true 时,Until-Successful 会重试。阅读此内容:

failureExpression : Specifies an expression that, when it evaluated to true, determines that the processing of one route was a failure. If no expression is provided, only an exception will be treated as a processing failure.

在您的情况下,直到成功范围确实会重试,因为您的 FailureExpression 被评估为 True。将此表达式替换为 #[true] 不可避免地会使此范围重试,直到达到配置的最大尝试次数。

希望有帮助;)

/托尼

关于java - 同步直到成功失败表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36648531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com