我正在使用JMS客户端。该队列是IBM MQ。当我在队列上写入数据时,它会添加RFH标头。如何剥离RFH标头。我不能使用IBM MQ apis。
另一种方法是使用队列URI属性(http://www.ibm.com/support/knowledgecenter/api/content/nl/en-us/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q032240_.htm#q032240___q032240_4)。 targetClient
属性控制是使用RFH还是本机格式。
Queue queue = queueSession.createQueue("queue:///" + queueName + "?targetClient=1");
使用JNDI队列配置,您可以设置targetClient = MQ,其效果与targetClient = 1相同:
<jmsQueue jndiName="jms/queue/name">
<properties.wmqJms CCSID="819" baseQueueName="MQ.QUEUE.NAME" encoding="273" targetClient="MQ"/>
</jmsQueue>
您还可以在队列本身上将PROPCTL
设置为NONE
,这将剥离标题,但根据我的经验,最好使用应用程序配置。
从IBM WebSphere MQ v7开始,建议告诉Java实现不生成MQRFH2头的方法是调用MQDestination.setMessageBodyStyle( WMQConstants.WMQ_MESSAGE_BODY_MQ)
,因为如果将TARGCLIENT
明确设置为MessageBodyStyle
,UNSPECIFIED
属性仅用作后备选项。
在您的发件人应用程序中,使用MQDestination.setTargetClient
作为参数调用WMQConstants.WMQ_CLIENT_NONJMS_MQ
方法。这将确保消息中不包含RFH2
标头。
可用于setTargetClient方法的另一个值是MQJMS_CLIENT_JMS_COMPLIANT
。这表明RFH2
格式用于发送信息。使用WebSphere MQ类进行JMS的应用程序了解RFH2
格式。在与JMS应用程序的目标WebSphere MQ类交换信息时,请设置MQJMS_CLIENT_JMS_COMPLIANT
常量。
谢谢你的回复。来自Stavr00和Shashi的答案是正确的。虽然我通过使用wmq资源适配器修复它。在资源适配器的配置中,我使用了
<config-property name="targetClient">MQ</config-property>
这相当于将WMQConstants.WMQ_CLIENT_NONJMS_MQ设置为队列。