MQ WebSphere MessageID问题

时间:2014-03-03 19:22:10

标签: c# ibm-mq

另一个新的MQ Server问题。我正在构建一个ASP.NET C#应用程序,它需要浏览消息,将消息文本保存到数据库,然后读取消息,以便将其从队列中删除。这样,如果保存失败,消息仍然在队列中,我不必要求重新发送。

问题是我需要一种方法来在浏览时唯一地识别消息,这样我就可以在成功保存数据库后读取(删除)消息。我读到了关联ID和MessageId,并且无法获取值。

CorrelationId始终为空,因此我无法使用它。 messageId我无法弄清楚如何将其转换为可读的东西。

例如: MQ资源管理器显示的邮件ID: AMQ AZMEUNK62将bSÝ MQ资源说,消息ID字节是: 414D512055534E4A5241523632202020126210532001DD02

如何将消息ID字节转换为人类可读的字符串并返回?

我已经尝试了下面的代码,它返回了无法使用的结果( AMQAZMEUNK62↕b►S☺?☻?)

string msgIdStr = System.Text.Encoding.Default.GetString(mqMessage.MessageId); 
string strMsgId = Encoding.UTF8.GetString(mqMessage.MessageId, 0, mqMessage.MessageId.Length);

由于这些帖子,我尝试了这些方法 -

Passing ids in IBM MQ client

How to convert byte[] to string?

欢迎任何想法。

1 个答案:

答案 0 :(得分:1)

MQ Message和Correl(和Group)ID不是人类可读的,我强烈建议你把它们保存为二进制,即字节数组(或转换为字符串中的十六进制数字或类似的东西)如果你真的想要一个可显示的版本)。该字符串包含AMQ,qmgr名称的开头,以及一些二进制信息(例如,与日期/时间和计数器有关)。 (在C应用程序中看到的一个常见问题是人们strcpy⁢它在第一个null处截断并且从不匹配任何东西)

这里更好的问题是您的实际问题是什么。您可以浏览,在光标下获取消息,或者您知道可以通过消息ID获取的msgid。在数据库更新之后提交之前,你可能会得到同步点,它不会删除它,或者你可以看看在与数据库更新相同的事务中获取get ...有很多选项,这取决于你的内容需要!