作为MQRFH2而不是MQSTR

时间:2019-04-30 14:34:44

标签: .net ibm-mq

我们有一个ASP.NET Web服务,该服务接收文本和目标信息,并使用IBM WebSphere MQ客户端将MQ消息从我们的服务器发送到另一个Windows服务器。

我们已经安装了v6,并且一切正常,可以将消息发送到安装了v9.0.0.1的服务器。我们已将服务器从v6升级到v9。

现在,当这些消息以MQSTR头类型显式发送时,它们将以头类型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();

1 个答案:

答案 0 :(得分:2)

这里的问题是,我们在此服务器上安装并运行了第三方工具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动态地将MQ消息属性添加到要跟踪的消息,该属性通过MQRFH2在消息中传输   标头。在配置AppDynamics之前,请确保您的   应用程序不受此修改的影响   消息。可能受到影响的应用示例包括   期望消息内容位于消息中的特定位置   而不绕过邮件中可能的额外标题。
  •   

可以通过在服务器上打开和关闭AppDynamics服务来暴露此问题。在服务停止的情况下,当以MQSTR发送时,所有消息都会在MQSTR中接收。

服务器已安装MQ Client v6时,

AppDynamics已经安装并正在运行。仅在升级到MQ Client v9时才出现此问题。