Spring Integration:避免丢失消息的策略

时间:2014-02-23 12:36:44

标签: spring-integration

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

这有两个重要原因:

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

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

  3. 由于

1 个答案:

答案 0 :(得分:1)

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

  1. 通过精心设计服务来避免“瓶颈”,通常会使其成为无状态。
  2. 目前尚不清楚你的意思;如果通道由JMS支持,则输出端的每个线程都可以获得自己的事务,并且在服务失败的情况下,消息将回滚到队列中。这与简单的执行程序通道完全不同(事务永远不会工作,并且具有单独的实例也无济于事。)
  3. 也许如果你能描述一个特定的用例/配置,有人可以提供一些建议。