我使用简单的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&#39;默认情况下。 如何更改MQ标头以便显式发送MQSTR格式。
提前致谢。
答案 0 :(得分:1)
IBM MQ JMS接口有一个名为TARGCLIENT
的属性,当设置为值MQ
时,不会添加MQRFH2标头。我不知道Spring接口是否允许它被使用。
或者,可以将队列管理器上的队列定义配置为删除无法处理它的应用程序的标头。这是一种更好的方法来删除MQRFH2标头,因为它在get time而不是put时删除它,这意味着如果应用程序 能够处理MQRFH2标头,它仍然存在,但是对于那些无法处理它的应用程序,它们将被删除。
要使队列以这种方式运行,请在队列管理器上发出以下MQSC命令:
ALTER QLOCAL(q-name) PROPCTL(NONE)
补充阅读
答案 1 :(得分:1)
必须设置属性targetcllient = 1才能将msg作为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>