2014-03-03 173 views
1

另一個newb MQ Server問題。我正在構建需要瀏覽消息的ASP.NET C#應用程序,將消息文本保存到數據庫,然後讀取消息,以便將其從隊列中刪除。這樣,如果保存失敗,郵件仍然在隊列中,我不必要求它被重新發送。MQ WebSphere MessageID Woes

的問題是我需要一種方法來唯一標識的消息時,瀏覽這樣我就可以讀(刪除)它成功的數據庫保存之後。我讀了Correlation ID和MessageId,並且無法獲取值。

的的correlationID始終是空白的,所以我不能使用。 messageId我無法弄清楚如何將其轉換爲可讀的內容。

例如: MQ Explorer顯示messageID爲:AMQ AZMEUNK62 bS「。 MQ資源表示,消息ID字節爲:414D512055534E4A5241523632202020126210532001DD02

如何將消息ID字節轉換爲可讀的字符串並返回?

我已經試過下面返回不能使用的結果代碼(AMQ AZMEUNK62↕b►S☺?☻)

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

我嘗試這些方法,因爲這些posts-

Passing ids in IBM MQ client

How to convert byte[] to string?

任何想法最受歡迎。

回答

1

MQ消息和相關及(和組)ID是人力無法讀取,我強烈建議你讓他們爲二進制,即字節數組(或轉換爲十六進制數字的字符串或類似的東西,如果你真的想一個可顯示的版本)。例如,該字符串包含AMQ,qmgr名稱的開頭以及一些二進制信息(與日期/時間和計數器有關)。 (C程序看到的一個普遍問題是人們strcpy'ing它,這在第一個空截斷,從不匹配任何內容)

這裏一個更好的問題是,什麼是你實際問題。您可以瀏覽,在光標下獲取消息,或者如果您知道通過消息ID獲取的msgid。你可以得到同步點,它不會刪除它,直到你在數據庫更新之後提交,或者你可以看到在與數據庫更新相同的事務中獲得...有很多選項,這取決於你需要什麼!

+0

謝謝賈森。我將把消息ID作爲二進制存儲在數據庫中,然後稍後使用它從隊列中刪除特定的消息。 我想是真正給我帶來的是MQ Explorer對消息ID字節的表示;我試圖獲得這個價值,但它似乎是不可能的。 –