【问题标题】:Which type of Spring Integration Channel?哪种类型的 Spring 集成通道?
【发布时间】:2013-08-10 11:39:42
【问题描述】:

我在 ActiveMQ 中有一个队列,并希望使用 spring 集成将消息从队列中取出,并放入我们的应用程序中。我们已经部署了两次应用程序(以防其中一个失败)——每条消息应该只由一个应用程序处理。此外,我需要一个 jms tx 管理器,以防在消息处理期间发生致命的应用程序故障。因此,我的通道适配器如下所示:

<int-jms:message-driven-channel-adapter 
    channel="myChannel" 
    connection-factory="jmsConnectionFactory"
    pub-sub-domain="false"
    destination-name="MY_QUEUE" 
    transaction-manager="jmsTxManager" />

myChannel 是直接通道时,这一切都可以正常工作,但是我想使用任务执行器以便一次处理许多消息。

为了解决致命的应用程序故障,我认为集合通道可能是要走的路(我相信当任务执行器中的线程空闲时,通道适配器将转到活动 mq 以检索另一条消息)通道上不会有任何消息保存在内存中。这似乎不起作用,以下代码抛出TaskRejectException

<int:channel id="myChannel">
    <int:rendezvous-queue />
</int:channel>
<task:executor id="taskExecutor" pool-size="2" queue-capacity="0" />
<int:router input-channel="myChannel" expression="payload.getType() + 'Channel'">
    <int:poller fixed-rate="1000" task-executor="taskExecutor" />
</int:router>

位于路由器之后的服务激活器,同步处理,需要 10 秒来处理,所以我希望在 t=0s 时离开并检索 2 条消息(线程池的大小),处理它们,释放在 t=10s 时线程到线程池,然后再次向活动 mq 请求消息。然而,似乎在 t=0s 检索到超过 2 条消息。

谁能建议我应该怎么做?

【问题讨论】:

    标签: java spring jms activemq spring-integration


    【解决方案1】:

    为了使交易生效,您必须使用直接渠道。

    您可以使用message-driven-channel-adapterconcurrent-consumersmax-concurrent-consumers)上的并发属性来控制并发线程数。

    【讨论】:

      猜你喜欢
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2020-01-12
      相关资源
      最近更新 更多