【问题标题】:How to alter MQ headers using Spring JmsTemplate如何使用 Spring JmsTemplate 更改 MQ 标头
【发布时间】:2016-10-26 05:18:29
【问题描述】:

我正在使用简单的 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 格式。

提前致谢。

【问题讨论】:

    标签: java spring ibm-mq


    【解决方案1】:

    您必须设置属性 targetclient=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>
    

    【讨论】:

      【解决方案2】:

      IBM MQ JMS 接口有一个名为 TARGCLIENT 的属性,当设置为值 MQ 时,不会添加 MQRFH2 标头。不知道Spring接口是否允许使用。

      或者,可以将队列管理器上的队列定义配置为删除那些无法处理它的应用程序的标头。这是删除 MQRFH2 标头的更好方法,因为它是在获取时间而不是在放置时间删除它,因此意味着如果应用程序能够处理 MQRFH2 标头,它仍然存在,但是对于那些无法处理它的应用程序,它会被删除。

      要使队列以这种方式运行,请在队列管理器上发出以下 MQSC 命令:

      ALTER QLOCAL(q-name) PROPCTL(NONE)
      

      补充阅读

      【讨论】:

      • 我能够在不使用 spring 接口的情况下实现这一点,但是,我想知道是否有一种方法可以使用 Spring jmsTemplate 来做到这一点。 :) 我使用了这个并且我能够以 MQSTR 格式放置消息。使用 ibm.mq.jms api。 ((com.ibm.mq.jms.MQQueue) 队列).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 2020-02-22
      相关资源
      最近更新 更多