如何使用Spring JmsTemplate更改MQ头文件

4

我正在使用简单的Spring JmsTemplate将消息发送到MQ。

<beans:bean id="myJMSTemplate" class="org.springframework.jms.core.JmsTemplate">
    <beans:property name="connectionFactory">
        <beans:ref bean="cachedConnectionFactory" />
    </beans:property>
    <beans:property name="pubSubDomain">
        <beans:value>false</beans:value>
    </beans:property>
    <beans:property name="receiveTimeout">
        <beans:value>1000</beans:value>
    </beans:property>
</beans:bean>

    <int-jms:outbound-channel-adapter id="sendMessageToAvengers" channel="antEventChannel" jms-template="myJMSTemplate" destination-name='com.marvel.avengers.antMan'/>

这个很好,但是我的客户端应用程序无法处理消息,因为消息格式默认为“MQHRF2”。我该如何更改我的MQ头以显式发送MQSTR格式?
提前感谢。
2个回答

3
您必须将属性targetclient=1设置为MQSTR才能发送消息。 在Java代码的发送部分中,更改队列名称如下:
String senderQ = "queue:///MYQUEUENAME?targetClient=1";
jmsTemplate.send(senderQ, new MessageCreator() {
    public Message createMessage(Session session) throws JMSException {
         TextMessage message = session.createTextMessage(text);
         message.setJMSReplyTo(replyToQ);
         return message;
    }
});

或者你可以尝试在jmstemplate bean中进行设置。

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <!-- set format to MQSTR with "targetClient=1" parameter -->
    <property name="defaultDestinationName" value="queue:///default?targetClient=1" />
    <property name="connectionFactory" ref="mqConnectionFactory" />
</bean>

2
IBM MQ的JMS接口有一个称为“TARGCLIENT”的属性,当其设置为值“MQ”时,将不会添加MQRFH2头文件。我不知道Spring接口是否允许使用它。
另外,队列管理器上的队列定义可以配置为删除那些无法处理它的应用程序的头文件。这是一种更好的删除MQRFH2头文件的方法,因为它在获取时而不是放置时删除它,因此如果一个应用程序能够处理MQRFH2头文件,则仍然存在,但对于那些无法处理它的应用程序,则为它们删除。
要使队列以这种方式运行,请在您的队列管理器上发出以下MQSC命令:
ALTER QLOCAL(q-name) PROPCTL(NONE)

更多阅读材料


1
我能够在没有使用Spring接口的情况下实现这一点,但是想知道是否有一种方式可以使用Spring jmsTemplate来实现这一点。 :)我使用了ibm.mq.jms API,并且成功地将消息以MQSTR格式放入了队列中。 ((com.ibm.mq.jms.MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ); - RIP SunMicrosystem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接