首页 文章

Spring Integration:避免丢失消息的类别

提问于
浏览
1

如果使用任务执行程序定义Spring Integration通道,则将使用线程池来处理消息 . 如果服务激活器或转换器 endpoints 组件从此内部通道接收消息,则将实例化 endpoints 组件池,每个线程一个?如果这不是默认行为,那么为实现此目的需要什么配置?

这有两个重要原因:

  • 这样接收消息的服务激活器/变换器就不会成为瓶颈 .

  • 确保 endpoints 组件处理内部通道使用的同一线程中的消息,因此它们是同一事务的一部分 . 如果是这种情况并且使用JMS持久保存通道,则不会丢失消息 . 否则,如果 endpoints 在单独的事务中运行,则在将消息传递到 endpoints 组件后,如果JVM发生故障,则消息将保留在通道上这一事实将无济于事 .

谢谢

1 回答

  • 1

    没有;无论输入通道中的线程是什么,每个 endpoints 都有一个实例 .

    • 通过仔细设计服务来避免"bottlenecks",通常是使其无状态 .

    • 目前尚不清楚你的意思;如果通道由JMS支持,则输出端的每个线程都可以获得自己的事务,并且在服务失败的情况下,消息将回滚到队列中 . 这与简单的执行程序通道完全不同(对于这些通道,事务永远不会起作用,并且具有单独的实例也无济于事) .

    也许如果你能描述一个特定的用例/配置,有人可以提供一些建议 .

相关问题