java - Apache Camel JMS 异常循环
问题描述
camelVersion = "2.19.1"
springVersion = "4.1.5.RELEASE"
jdk = "1.8"
正在使用 Apache Camel JMS、XA 事务 (atomikos) 和 Java/Spring。添加了一些代码来处理骆驼路由和业务逻辑处理期间可能发生的异常,即使用 onException。下面是我们遇到问题之前的实际代码,在发生异常后,onException 代码会像按照指定的数字重试一样处理它;将控件发送到错误处理程序,然后继续循环并一次又一次地处理相同的消息,并在发生异常和重试失败时执行相同的操作。
onException(Exception.class)
.log("Exception caught")
.redeliveryDelay(redliveryDelay) //delay time
.setHeader("exception", simple("${exception}"))
.maximumRedeliveries(redelivery) //number of retries
.process("errorHandler");
解决方案
经过一番研究;inOnly 和 inOut 概念有助于提出以下解决方案来第一次获取队列的消息,即如果发生异常并且重试也失败了。
onException(Exception.class)
.log("Exception caught")
.redeliveryDelay(redliveryDelay)
.setHeader("exception", simple("${exception}"))
.maximumRedeliveries(redelivery)
.process("errorHandler")
.handled(true)
.inOnly();
推荐阅读
- python - 当有背景线程时,为什么 sys.exit() 不会关闭 python?
- node.js - React 中的 formData,发送到后端 Express 收到 null
- r - 使用小鼠池功能时,对因子 x 调用 var(x) 已失效
- c++ - C++:为什么字符串数组要转换我的字符串?
- python - “设置后无法更改线程模式”Python中的运行时错误
- math - 与 L 的 2 阶张量和交换关系
- laravel - Laravel 8重定向到特定页面问题
- java - 使用开关分隔不同字母的输出
- android - 位置参数必须出现在命名参数之前,并且 Flutter 上的位置参数太多
- flutter - 如何缩放PDF文件并在颤动中截取缩放区域的屏幕截图