我正在尝试实现一个由几个webservice调用组成的进程,由Spring-integration读取的JMS消息启动。由于这些WS调用之间没有事务,因此我想跟踪我的进程已经走了多远,以便在重试消息处理时跳过已执行的步骤。
示例步骤:
现在,如果第一次尝试在步骤3中失败,我已经创建了一个B,并且知道了它的ID。因此,如果我想重试该消息,它将跳过第二步,并且不会给我留下不完整的B。
那么,问题是:是否有可能在消息处理失败时装饰Spring兼容读取的JMS消息以及其他标头属性?如果是这样,我怎么能这样做?
目前的工作方式:
我希望它如何工作:
可能实现这一目标的有以下几点:
虽然这有点像个hackish,希望有一个更优雅的解决方案。
答案 0 :(得分:1)
如果没有关于您的流的更多信息,很难概括,但您可以考虑添加自定义请求处理程序建议来装饰和/或重新路由失败的消息。请参阅Adding Behavior to Endpoints。
正如另一个答案所说,您无法修改消息,但可以从中构建新消息。
修改强>:
啊啊......现在我想我知道你在问什么;不,你不能“装饰”现有的消息;您可以使用其他标头重新发布它,而不是抛出异常。那么,问题是:是否有可能在消息处理失败时装饰Spring兼容读取的JMS消息以及其他标头属性?如果是这样,我怎么能这样做?
您可以在建议或错误流程中重新发布。
对你来说这似乎是一个“黑客”,但JMS API没有提供你想要的机制。
答案 1 :(得分:0)