【问题标题】:Spring Integration queue is not getting message but channel is gettingSpring Integration 队列没有收到消息,但通道正在收到
【发布时间】:2014-05-05 23:16:56
【问题描述】:

在 Websphere MQ 中使用 Spring Integration 将消息从一个队列传输到另一个队列。

OutPut Channel 显示消息正在发送,但我无法在 MQ Explorer 的队列中看到。会话如何提交?而且我无法停止 java 应用程序。如何优雅地停止连接停止? 我在哪里做错了? 这是上下文配置 -

<int:logging-channel-adapter log-full-message="true" id="logger" level="INFO"/>

<bean id="jmsConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
    <property name="hostName" value="localhost" />
    <property name="port" value="1414" />
    <property name="queueManager" value="TEST" />
    <property name="transportType" value="1" />
</bean>

<bean id="inQueue" class="com.ibm.mq.jms.MQQueue">
    <constructor-arg value="TESTQ" />
</bean>
<bean id="outQueue" class="com.ibm.mq.jms.MQQueue">
    <constructor-arg value="DEST_QUEUE" />
</bean>
<int:channel id="readFromChannel">
 <int:interceptors>
  <int:wire-tap channel="logger"/>
</int:interceptors>
</int:channel>
<int:channel id="sendToChannel" >
    <int:queue/>
<int:interceptors>
  <int:wire-tap channel="logger"/>
</int:interceptors> 
</int:channel>

<int-jms:message-driven-channel-adapter id="jmsInAdapter"
connection-factory="cachingConnectionFactory"
destination="inQueue"
channel="readFromChannel" />

<int-jms:message-driven-channel-adapter id="jmsOutAdapter"
connection-factory="cachingConnectionFactory"
destination="outQueue"
channel="sendToChannel" />


<bean id="myMessenger" class="test.MyMessenger" />     

<int:service-activator id="servAct" input-channel="readFromChannel" output-channel="sendToChannel" ref="myMessenger" method="transfer"/>

【问题讨论】:

    标签: ibm-mq spring-integration spring-jms


    【解决方案1】:

    如果我正确理解您的用例,您希望将消息从 TESTQ 转移到 DEST_QUEUE。但是你有&lt;int-jms:message-driven-channel-adapter&gt; 让双方都可以阅读他们的消息,但没有人可以将消息发送到DEST_QUEUE

    你的&lt;int:service-activator&gt; get message from readFromChannel 意思是'get message from TESTQ',但它把消息放到sendToChannel。但这并不是说您向DEST_QUEUE 发送消息。

    这是因为&lt;int-jms:message-driven-channel-adapter&gt; 用于从 JMS(在您的情况下为 MQ)读取消息。

    要将消息发送到 JMS(在您的情况下发送到 DEST_QUEUE),您必须使用 &lt;int-jms:outbound-channel-adapter&gt; 并且没有理由将 sendToChannel 标记为 &lt;queue&gt;

    【讨论】:

    • 谢谢,我会尝试使用
    • 感谢 Artem 非常感谢...您能告诉我如何在读取 1000 条消息后停止应用程序。
    • 我在 MyMessenger 类中有: if(count == 3) { MessageChannel inChannel = (MessageChannel) TestJMS.context.getBean("readFromChannel"); Message 操作 = (Message)MessageBuilder.withPayload("@servAct.stop()").build(); inChannel.send(操作); }
    • 但这会停止通道而不是应用程序连接。
    • 对,因为您停止了service-activator,但您确实必须停止 JMS 使用者。在您的情况下,&lt;int-jms:message-driven-channel-adapter&gt;TESTQ
    猜你喜欢
    • 2017-04-29
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    相关资源
    最近更新 更多