2014-02-23 103 views
0

如果使用任务执行器定义Spring Integration通道,则会使用线程池来处理消息。如果服务激活器或变换器端点组件从此内部接收消息通道,将会实例化一个端点组件池,每个线程一个?如果这不是默认行为,则需要进行哪些配置才能实现此目的?弹簧集成:用于避免丢失消息的策略

这是两个重要的原因:

  1. ,以便服务激活器/变压器接收,邮件将不会成为瓶颈。

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

感谢

回答

1

否;无论输入通道上的线程如何,每个端点都有一个实例。

  1. 您通过仔细设计服务(通常使其无状态)来避免“瓶颈”。
  2. 目前尚不清楚你的意思;如果通道由JMS支持,则输出端的每个线程都可以获得自己的事务,并且在发生服务故障时,消息将回滚到队列中。这与一个简单的执行器通道完全不同(事务不能工作,并且有一个单独的实例也无济于事)。

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

+0

下面是一个例子来说明我的问题: – user1052610

+0

这里是一个例子来澄清我的问题:内部通道是由任务执行者定义的。通过轮询数据库的入站通道适配器将消息放置在通道上。变压器然后从内部通道接收消息。我的理解是内部(执行者)渠道不会成为任何前面的交易的一部分,但它会开始一个包含变压器的新交易。在这种情况下,即使通道将消息传递给变压器后出现故障,该消息也不会丢失。它是否正确? – user1052610

+0

为了澄清上述情况,当我说消息将被保存并且不会丢失时,我指的是一个由jms支持的执行器通道() – user1052610