如何删除JMS客户端的RFH2标头

问题描述 投票:1回答:5

我正在使用JMS客户端。该队列是IBM MQ。当我在队列上写入数据时,它会添加RFH标头。如何剥离RFH标头。我不能使用IBM MQ apis。

jms ibm-mq rfh2
5个回答
4
投票

另一种方法是使用队列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");

2
投票

使用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,这将剥离标题,但根据我的经验,最好使用应用程序配置。


2
投票

从IBM WebSphere MQ v7开始,建议告诉Java实现不生成MQRFH2头的方法是调用MQDestination.setMessageBodyStyle( WMQConstants.WMQ_MESSAGE_BODY_MQ),因为如果将TARGCLIENT明确设置为MessageBodyStyleUNSPECIFIED属性仅用作后备选项。


1
投票

在您的发件人应用程序中,使用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常量。


0
投票

谢谢你的回复。来自Stavr00和Shashi的答案是正确的。虽然我通过使用wmq资源适配器修复它。在资源适配器的配置中,我使用了

<config-property name="targetClient">MQ</config-property>

这相当于将WMQConstants.WMQ_CLIENT_NONJMS_MQ设置为队列。

© www.soinside.com 2019 - 2024. All rights reserved.