1

我可以从队列中获取事件消息。我得到消息属性。我很确定 MQEVENT 类型是 PCF 格式,但我似乎找不到任何关于如何获取该消息并将其转换为人类可读格式的好的文档。

AccountingToken
ApplicationIdData
ApplicationOriginData
BackoutCount 0
BackoutCount 0
CharacterSet 437
CompletionCode 0
CorrelationId System.Byte[]
DataLength 236
DataOffset 0
Encoding 546
Expiry -1
Feedback 0
Format MQEVENT
GroupId System.Byte[]
MessageFlags 0
MessageId System.Byte[]
MessageLength 236
MessageSequenceNumber 1
MessageType 8
偏移量 0
OriginalLength -1
Persistence 0
Priority 0
PutApplicationName NTPMFG01
PutApplicationType 7
PutDateTime 3/19/2010 10:29:08 PM
ReasonCode 0
ReasonName MQRC_OK
ReplyToQueueManagerNameNTPMFG01
ReplyToQueueName
Report 0
TotalMessageLength 236
UserId
版本 1

这是信息。
$ ? - ?? ? ? D¯ 0 MFG01 ? D-0 MF G.CUST.CAT ? ? #¤ ? ? $ ? ? ? % ? ? & ?

4

1 回答 1

1

if (myMQMessage.Format.CompareTo(MQC.MQFMT_EVENT) == 0) 我认为它需要处理两次。首先用 MQCFH 处理 PCF 头

BuildMQCFH(new IBM.WMQ.PCF.MQCFH(myMQMessage));

public void BuildMQCFH(IBM.WMQ.PCF.MQCFH eventMessageHeader) {
  int reasonForEvent = eventMessageHeader.Reason;
}

然后您必须将 DataOffset 重置为 0

myMQMessage.DataOffset = 0;

其次用 PCFParameter 处理 PCF 参数。BuildPcfMessage(新 IBM.WMQ.PCF.PCFMessage(myMQMessage));

public void BuildPcfMessage(IBM.WMQ.PCF.PCFMessage pcfMessage) {
  IBM.WMQ.PCF.PCFParameter[] pcfParameters = pcfMessage.GetParameters();
  afflictedQueueManager = pcfParameters[0].GetValue().ToString();
  afflictedQueue = pcfParameters[1].GetValue().ToString();
}

MQMessage、PCF.PCFMessage 和 MQCF 各自执行一个读取字节,移动偏移量,之后不进行重置。

于 2010-04-02T19:02:53.003 回答