MQ 消息作为 MQRFH2 而不是 MQSTR 传递
MQ messages coming through as MQRFH2 instead of MQSTR
我们有一个 ASP.NET Web 服务,它接收文本和目标信息,并使用 IBM WebSphere MQ Client 将 MQ 消息从我们的服务器发送到另一个 windows 服务器。
我们安装了 v6,一切正常,向安装了 v9.0.0.1 的服务器发送消息。我们已将服务器从 v6 升级到 v9。
当这些消息作为 MQSTR header 类型显式发送时,这些消息现在作为 header 类型 MQHRF2 接收。
这可能与 v6->v9 的升级有关。关于可能导致这种情况的任何想法都会非常有帮助,因为我不知所措。
编辑:
代码示例:
这是我们如何与 Web 应用程序中的 MQ API 交互的精简版:
MQEnvironment.Hostname = "TEST_HOST";
MQEnvironment.Channel = "TEST_CHANNEL";
MQEnvironment.Port = 1414; // Default MQ Port
var queueMgr = new MQQueueManager("TEST", new Hashtable());
var openOptions = MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_OUTPUT + MQC.MQOO_SET_ALL_CONTEXT;
var queue = queueMgr.AccessQueue("QueueName", openOptions);
var message = new MQMessage();
message.ApplicationIdData = ".xml";
message.Write(Encoding.UTF8.GetBytes("test"));
message.Format = MQC.MQFMT_STRING;
message.Persistence = MQC.MQPER_PERSISTENT;
message.CorrelationId = MQC.MQCI_NEW_SESSION;
var putOptions = new MQPutMessageOptions();
putOptions.Options += MQC.MQPMO_SET_IDENTITY_CONTEXT + MQC.MQPMO_SYNCPOINT;
queue.Put(message, putOptions);
queueMgr.Commit();
这里的问题是我们安装了第三方工具 AppDynamics 并且 运行 在此服务器上。该工具用于绩效管理。此工具会干扰 MQ 消息,导致我有详细信息的行为;以 MQHRF2 格式接收消息。
IBM 的文档中对此进行了说明:
https://www.ibm.com/support/knowledgecenter/en/SSYHZ9_5.5.0/com.ibm.omegamon_apm.doc/troubleshooting/zapm_issues.htm
- AppDynamics dynamically adds an MQ message property to messages to be tracked, which is transmitted in the message via an MQRFH2
header. Before you configure AppDynamics, ensure that your
application programs are not affected by this modification to
messages. Examples of applications that might be affected are ones
that expect message content at a specific location in the message
without bypassing possible extra headers in the message.
可以通过打开和关闭服务器上的 AppDynamics 服务来暴露此问题。服务停止后,当作为 MQSTR 发送时,所有消息都在 MQSTR 中接收。
AppDynamics 已经安装,运行 当服务器安装了 MQ Client v6 时。此问题仅在升级到 MQ 客户端 v9 时才开始出现。
我们有一个 ASP.NET Web 服务,它接收文本和目标信息,并使用 IBM WebSphere MQ Client 将 MQ 消息从我们的服务器发送到另一个 windows 服务器。
我们安装了 v6,一切正常,向安装了 v9.0.0.1 的服务器发送消息。我们已将服务器从 v6 升级到 v9。
当这些消息作为 MQSTR header 类型显式发送时,这些消息现在作为 header 类型 MQHRF2 接收。
这可能与 v6->v9 的升级有关。关于可能导致这种情况的任何想法都会非常有帮助,因为我不知所措。
编辑: 代码示例:
这是我们如何与 Web 应用程序中的 MQ API 交互的精简版:
MQEnvironment.Hostname = "TEST_HOST";
MQEnvironment.Channel = "TEST_CHANNEL";
MQEnvironment.Port = 1414; // Default MQ Port
var queueMgr = new MQQueueManager("TEST", new Hashtable());
var openOptions = MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_OUTPUT + MQC.MQOO_SET_ALL_CONTEXT;
var queue = queueMgr.AccessQueue("QueueName", openOptions);
var message = new MQMessage();
message.ApplicationIdData = ".xml";
message.Write(Encoding.UTF8.GetBytes("test"));
message.Format = MQC.MQFMT_STRING;
message.Persistence = MQC.MQPER_PERSISTENT;
message.CorrelationId = MQC.MQCI_NEW_SESSION;
var putOptions = new MQPutMessageOptions();
putOptions.Options += MQC.MQPMO_SET_IDENTITY_CONTEXT + MQC.MQPMO_SYNCPOINT;
queue.Put(message, putOptions);
queueMgr.Commit();
这里的问题是我们安装了第三方工具 AppDynamics 并且 运行 在此服务器上。该工具用于绩效管理。此工具会干扰 MQ 消息,导致我有详细信息的行为;以 MQHRF2 格式接收消息。
IBM 的文档中对此进行了说明: https://www.ibm.com/support/knowledgecenter/en/SSYHZ9_5.5.0/com.ibm.omegamon_apm.doc/troubleshooting/zapm_issues.htm
- AppDynamics dynamically adds an MQ message property to messages to be tracked, which is transmitted in the message via an MQRFH2 header. Before you configure AppDynamics, ensure that your application programs are not affected by this modification to messages. Examples of applications that might be affected are ones that expect message content at a specific location in the message without bypassing possible extra headers in the message.
可以通过打开和关闭服务器上的 AppDynamics 服务来暴露此问题。服务停止后,当作为 MQSTR 发送时,所有消息都在 MQSTR 中接收。
AppDynamics 已经安装,运行 当服务器安装了 MQ Client v6 时。此问题仅在升级到 MQ 客户端 v9 时才开始出现。