Jms 为什么RFH2报头放在消息之前而不是报头中?

Jms 为什么RFH2报头放在消息之前而不是报头中?,jms,ibm-mq,rfh2,mq-visual-edit,Jms,Ibm Mq,Rfh2,Mq Visual Edit,我需要创建一个带有RFH2头的消息,并将其注入IBM MQ。请在下面查找如何创建该消息 def message = new MQMessage() def rfh2 = new MQRFH2() rfh2.setEncoding(CMQC.MQENC_NATIVE) rfh2.setCodedCharSetId(CMQC.MQCCSI_INHERIT) rfh2.setFormat(" ") rfh2.setNameValueCCSID(1208) rfh2.setFieldVal

我需要创建一个带有RFH2头的消息,并将其注入IBM MQ。请在下面查找如何创建该消息

def message = new MQMessage()
def rfh2 = new MQRFH2()
rfh2.setEncoding(CMQC.MQENC_NATIVE)
rfh2.setCodedCharSetId(CMQC.MQCCSI_INHERIT)
rfh2.setFormat("        ")
rfh2.setNameValueCCSID(1208)
rfh2.setFieldValue('mcd', 'Msd', 'jms_byte')
rfh2.setFieldValue('jms', 'Dst', 'queue:///myqueue')
rfh2.setFieldValue('jms', 'Pri', 0)
rfh2.setFieldValue('usr', 'Sender', 'mysender')
rfh2.write(message)

message.writeString('''${msgText}''')
但是,标题内容似乎不是放在标题中,而是放在消息之前。请在下面找到一个示例:

使用MQ Visual Edit发送消息的服务器日志

标题

信息

信息

rfh2.setFormat(“RHF2”)

这是无效的

rfh2.setFormat(CMQC.MQFMT__NONE)

这表示消息负载没有类型。i、 e.此RFH2结构后未找到字符串或其他内部文件

像MQ可视化编辑吗

是的,MQ VisualEdit使用MQRFH2类,但您需要了解,由程序员编写正确的MQMD.Format值

您是否将消息的MQMD.Format设置为MQFMT_RF_HEADER_2:

msg.format = CMQC.MQFMT_RF_HEADER_2;
我已经在StackOverflow和我的博客上发布了许多功能齐全的Java(非JMS)程序,它们创建了MQRFH2(也称为JMS)消息

您可以使用我的名字搜索MQRFH2以在此处找到它们

下面介绍了MQ可视化编辑如何处理显示命名属性与原始MQRFH2消息的比较

下面是一个演示如何在非JMS Java应用程序中创建JMS(MQRFH2)消息的示例:

最后,展示了如何在非JMS Java应用程序中处理传入JMS(MQRFH2)消息:

rfh2.setFormat(“RHF2”)

这是无效的

rfh2.setFormat(CMQC.MQFMT__NONE)

这表示消息负载没有类型。i、 e.此RFH2结构后未找到字符串或其他内部文件

像MQ可视化编辑吗

是的,MQ VisualEdit使用MQRFH2类,但您需要了解,由程序员编写正确的MQMD.Format值

您是否将消息的MQMD.Format设置为MQFMT_RF_HEADER_2:

msg.format = CMQC.MQFMT_RF_HEADER_2;
我已经在StackOverflow和我的博客上发布了许多功能齐全的Java(非JMS)程序,它们创建了MQRFH2(也称为JMS)消息

您可以使用我的名字搜索MQRFH2以在此处找到它们

下面介绍了MQ可视化编辑如何处理显示命名属性与原始MQRFH2消息的比较

下面是一个演示如何在非JMS Java应用程序中创建JMS(MQRFH2)消息的示例:


最后,展示了如何在非JMS Java应用程序中处理传入JMS(MQRFH2)消息:

这是否回答了您的问题?这个答案解释了如何使用JMeter,谢谢。但不是如何解决我的标题问题。所以将
rfh2.setFormat(“”
更改为
rfh2.setFormat(“RHF2”)
?因为负责应用程序的人告诉我“你需要在格式字段中填入8个空格”。实际上,当你调用
rfh2.write
时,这是自动的。您应该这样设置格式,它应该与blanks
rfh2.setFormat(CMQC.MQFMT\u NONE)
相同。对于
usr
属性,也只能调用
rfh2.setFieldValue
,其他三个在调用
rfh2.write
@JoshMc时设置。谢谢。我根据你的评论用新代码更新了我的问题。这是否回答了你的问题?这个答案解释了如何使用JMeter,谢谢。但不是如何解决我的标题问题。所以将
rfh2.setFormat(“”
更改为
rfh2.setFormat(“RHF2”)
?因为负责应用程序的人告诉我“你需要在格式字段中填入8个空格”。实际上,当你调用
rfh2.write
时,这是自动的。您应该这样设置格式,它应该与blanks
rfh2.setFormat(CMQC.MQFMT\u NONE)
相同。对于
usr
属性,也只能调用
rfh2.setFieldValue
,其他三个在调用
rfh2.write
@JoshMc时设置。谢谢。我根据你的评论用新代码更新了我的问题。非常感谢你,非常有趣的博客
msg.format=CMQC.MQFMT_RF_HEADER_2
修复了我的问题!我只有最后一个问题。在我的过程中,当处理注入的消息时,会在另一个队列中发送消息。你能告诉我怎么找到这封信吗?事实上,我需要先提取此消息的内容,然后才能继续此过程。提前谢谢你。我试过了,但是当我试图检索邮件时遇到了问题。你能帮我一下吗?非常感谢,非常有趣的博客
msg.format=CMQC.MQFMT_RF_HEADER_2
修复了我的问题!我只有最后一个问题。在我的过程中,当处理注入的消息时,会在另一个队列中发送消息。你能告诉我怎么找到这封信吗?事实上,我需要先提取此消息的内容,然后才能继续此过程。提前谢谢你。我试过了,但是当我试图检索邮件时遇到了问题。你能帮我一下吗?非常感谢
 2020-04-21 11:07:59.913 DEBUG 48093 --- [DefaultMessageListenerContainer-2] 
 c.b.i.c.listeners.AbstractAgiListener    : Receive message on MQ with header : {someargs}
 RFH ¨ÿÿÿþ        ¸ <mcd><Msd>jms_bytes</Msd></mcd> 8<jms><Dst>queue:///myqueue</Dst>
<Pri>0</Pri></jms>    <usr><Sender>mysender</Sender></usr><Document ...>...</Document>
def message = new MQMessage()
def rfh2 = new MQRFH2()
rfh2.setEncoding(CMQC.MQENC_NATIVE)
rfh2.setCodedCharSetId(CMQC.MQCCSI_INHERIT)
rfh2.setFormat(CMQC.MQFMT_NONE)
rfh2.setNameValueCCSID(1208)
rfh2.setFieldValue('mcd', 'Msd', 'jms_byte')
rfh2.setFieldValue('usr', 'Sender', 'mysender')
rfh2.write(message)
msg.format = CMQC.MQFMT_RF_HEADER_2;