【问题标题】:Spring Integration Concurrent JMS adapterSpring 集成并发 JMS 适配器
【发布时间】:2015-01-19 17:16:39
【问题描述】:

我正在使用 Spring Integration (3.0.6),同时使用 message-driven-channel-adapter 时遇到问题。如果我将 2 个作业发送到 JMS 队列并确保第一个作业永远不会完成(保持循环),那么第二个作业永远不会从队列中取出。

如果我从通道适配器中删除transaction-manager,我会得到我期望的并发。有人认为我的配置方式有什么问题吗?

<int-jms:message-driven-channel-adapter 
    channel="jobsChannel" 
    connection-factory="jmsConnectionFactory"
    pub-sub-domain="false"
    destination-name="JOBS_QUEUE" 
    transaction-manager="jmsTxManager"
    concurrent-consumers="5"
    max-messages-per-task="1"
    error-channel="errorChannel"
    id="jobJmsReceiver" />

<amq:broker useJmx="false" persistent="true"> 
    <amq:transportConnectors>
        <amq:transportConnector uri="tcp://localhost:0" />
    </amq:transportConnectors>
</amq:broker>

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="vm://localhost" />
</bean>

<bean id="jmsTxManager" class="org.springframework.jms.connection.JmsTransactionManager">
    <property name="connectionFactory" ref="jmsConnectionFactory"></property>
</bean>

【问题讨论】:

    标签: java spring jms spring-integration


    【解决方案1】:

    我必须查看 DEBUG 日志,但您真的不需要事务管理器,设置 acknowledge="transacted" 并且容器将在会话中使用本地事务。

    在同步事务(例如使用 JDBC tm)或在应用服务器中使用 JTA 事务管理器时,您通常只需要外部事务管理器。

    【讨论】:

    • 谢谢,这适合我的用例并且可以同时工作
    猜你喜欢
    • 2011-08-29
    • 1970-01-01
    • 2014-10-23
    • 2012-06-14
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    相关资源
    最近更新 更多