为什么 RFH2 header 放在消息之前而不是 header 中?
Why RFH2 header is put before the message instead of in the header?
我需要使用 RFH2 header 创建消息并将其注入 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}''')
不过,header的内容好像并没有放在header里面,而是放在了消息之前。请在下面找到一个示例:
服务器日志和使用 MQ Visual Edit 发送的消息
Header
2020-04-21 11:07:59.913 DEBUG 48093 --- [DefaultMessageListenerContainer-2]
c.b.i.c.listeners.AbstractAgiListener : Receive message on MQ with header : {someargs,
jms_destination=queue:///myqueue, someargs, Sender=mysender, someargs, jms_type=mcd://jms_byte,
someargs}
留言
<Document ...>...</Document>
服务器记录使用上述代码发送的消息
Header
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>
知道怎么解决吗?谢谢。
更新 1
即使使用下面的代码,信息仍然存在于消息之前
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)
rfh2.setFormat("RHF2")
无效。
rfh2.setFormat(CMQC.MQFMT_NONE)
这表示消息负载没有类型。也就是说,它不是字符串,或者在这个 RFH2 结构之后没有找到另一个内部。
Like MQ Visual Edit do?
是的,MQ Visual Edit 使用 MQRFH2 class,但您需要了解由程序员编写正确的 MQMD.Format 值。
您是否将消息的 MQMD.Format 设置为 MQFMT_RF_HEADER_2:
msg.format = CMQC.MQFMT_RF_HEADER_2;
我已经在 Whosebug 和我的博客上发布了很多创建 MQRFH2(又名 JMS)消息的全功能 Java(非 JMS)程序。
你可以在这里用我的名字搜索 MQRFH2 来找到它们。
这里描述了 MQ Visual Edit 如何处理显示命名属性与原始 MQRFH2 消息。 https://www.capitalware.com/rl_blog/?p=4786
这里展示了如何在非 JMS Java 应用程序中创建 JMS (MQRFH2) 消息:https://www.capitalware.com/rl_blog/?p=4823
最后,显示在非 JMS Java 应用程序中处理传入的 JMS (MQRFH2) 消息:https://www.capitalware.com/rl_blog/?p=4811
我需要使用 RFH2 header 创建消息并将其注入 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}''')
不过,header的内容好像并没有放在header里面,而是放在了消息之前。请在下面找到一个示例:
服务器日志和使用 MQ Visual Edit 发送的消息
Header
2020-04-21 11:07:59.913 DEBUG 48093 --- [DefaultMessageListenerContainer-2]
c.b.i.c.listeners.AbstractAgiListener : Receive message on MQ with header : {someargs,
jms_destination=queue:///myqueue, someargs, Sender=mysender, someargs, jms_type=mcd://jms_byte,
someargs}
留言
<Document ...>...</Document>
服务器记录使用上述代码发送的消息
Header
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>
知道怎么解决吗?谢谢。
更新 1
即使使用下面的代码,信息仍然存在于消息之前
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)
rfh2.setFormat("RHF2")
无效。
rfh2.setFormat(CMQC.MQFMT_NONE)
这表示消息负载没有类型。也就是说,它不是字符串,或者在这个 RFH2 结构之后没有找到另一个内部。
Like MQ Visual Edit do?
是的,MQ Visual Edit 使用 MQRFH2 class,但您需要了解由程序员编写正确的 MQMD.Format 值。
您是否将消息的 MQMD.Format 设置为 MQFMT_RF_HEADER_2:
msg.format = CMQC.MQFMT_RF_HEADER_2;
我已经在 Whosebug 和我的博客上发布了很多创建 MQRFH2(又名 JMS)消息的全功能 Java(非 JMS)程序。
你可以在这里用我的名字搜索 MQRFH2 来找到它们。
这里描述了 MQ Visual Edit 如何处理显示命名属性与原始 MQRFH2 消息。 https://www.capitalware.com/rl_blog/?p=4786
这里展示了如何在非 JMS Java 应用程序中创建 JMS (MQRFH2) 消息:https://www.capitalware.com/rl_blog/?p=4823
最后,显示在非 JMS Java 应用程序中处理传入的 JMS (MQRFH2) 消息:https://www.capitalware.com/rl_blog/?p=4811