另一个新的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);
由于这些帖子,我尝试了这些方法 -
How to convert byte[] to string?
欢迎任何想法。
答案 0 :(得分:1)
MQ Message和Correl(和Group)ID不是人类可读的,我强烈建议你把它们保存为二进制,即字节数组(或转换为字符串中的十六进制数字或类似的东西)如果你真的想要一个可显示的版本)。该字符串包含AMQ,qmgr名称的开头,以及一些二进制信息(例如,与日期/时间和计数器有关)。 (在C应用程序中看到的一个常见问题是人们strcpy⁢它在第一个null处截断并且从不匹配任何东西)
这里更好的问题是您的实际问题是什么。您可以浏览,在光标下获取消息,或者您知道可以通过消息ID获取的msgid。在数据库更新之后提交之前,你可能会得到同步点,它不会删除它,或者你可以看看在与数据库更新相同的事务中获取get ...有很多选项,这取决于你的内容需要!