事务轮询器向错误通道提交异常

时间:2019-02-26 12:27:23

标签: spring-integration

我有一个事务轮询器,它定期从jdbc支持的队列通道中轮询消息。

我有2个目标:
1)如果进程在处理消息的过程中死亡,请防止我的消息丢失。
2)通过将相关异常丢弃到错误通道中(并继续处理下一条消息)来防止单个格式错误的消息使整个过程停滞下来

我的问题:
如何设置(最好通过dsl)我的事务轮询器,以便它在不回滚事务的情况下将错误消息丢弃到错误通道?
(以防止在无限循环中重复播放同一条消息)。

非常感谢您的反馈和专业知识。

最好的问候

1 个答案:

答案 0 :(得分:2)

当前架构(我怀疑我们是否会对其进行更改)基于以下事实:在事务回滚之后,我们已经从轮询器发送到errorChannel。这样,我们不仅可以解决您的消息问题,还可以解决提交过程中可能出现的故障。因此,轮询任务中的所有异常均使用相同的errorChannel处理。

由于这样的errorChannel方法不符合您的要求,因为错误的消息将被回滚到数据库以进行下一次轮询,因此我建议您考虑使用ExpressionEvaluatingRequestHandlerAdvice在一些基本服务的下游,您肯定会因错误消息而失败。这样,您可以配置适当的failureChannel并在那儿发送错误消息,使整个过程保持不变,因此最终可以正确地提交。

在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/#message-handler-advice-chain