2013-08-31 53 views
0

發送javax.jms.TextMessage過天青Servicebus我想從.NET發送一個簡單的字符串消息使用AMQP在蔚藍的服務總線Java客戶端。按照documentation我應該能夠發送通知代理的消息是這樣的:如何從.NET

message = new BrokeredMessage("this is a text string"); 

,並讓它在Java客戶端作爲一個TextMessage(javax.jms.TextMessage)顯示出來。但是,當我嘗試在Java中將消息強制轉換爲TextMessage時,我得到一個異常,說它不能將jms.impl.BytesMessageImpl轉換爲TextMessage。任何人都知道爲什麼消息看起來像BytesMessage而不是TextMessage?

按照docs一個BytesMessage將建成這樣的:

byte[] bytes = { 33, 12, 45, 33, 12, 45, 33, 12, 45, 33, 12, 45 }; 
message = new BrokeredMessage(bytes); 

這我沒有做....

任何人都知道怎麼做這樣的事情?

[更新] 有趣的是,我測試了我的連接字符串中帶有和不帶TransportType = Amqp標識的發送代碼。我還驗證了運行時的代碼,MessagingFactory設置每次都設置爲正確的傳輸類型。無論我使用哪種傳輸類型的消息作爲BytesMessage到達我的Java應用程序。綜觀消息中的字節揭示了相同的結果,無論信息的發送方式:

@ string 3http://schemas.microsoft.com/2003/10/Serialization/�&BLABLA this is a message 

[UPDATE2] 我想通了,我的問題的根本原因。在我的設置中,我有一個將消息轉發到隊列的訂閱者。看起來,這是消息越來越混亂的地方。如果我將AMQP消息直接發送到隊列,它將作爲TextMessage發送到我的Java應用程序。如果我通過AMQP將消息發送到我的主題,然後通過訂閱者(通過過濾器)將其轉發到我的隊列,它會變成BytesMessage。

那麼,如何得到這個正常工作?有沒有辦法設置我的用戶轉發到隊列,所以這個工作?

回答

1

當使用轉發規則時,服務總線AMQP互操作性故障目前受到限制。在轉發過程中,使用數據協定序列化程序錯誤地重新序列化消息。我們將解決這個問題,並在完成後報告。同時,可能的解決方法是使用消息屬性來存儲應用程序數據而不是正文。也就是說,在消息上使用字符串屬性來存儲顯着信息,而不是使用正文。


祝好,
Dave。
服務總線隊

+0

有關這方面的消息嗎? –

1

你寫的代碼看起來是正確的。我唯一能想到的就是你有一箇舊版本的.NET SDK,它是在添加AMQP支持之前發佈的。你能用http://www.nuget.org/packages/WindowsAzure.ServiceBus/的最新Service Bus SDK來試試你的代碼嗎?

問候,
戴夫。
(Service Bus Team。)

+0

喜戴夫,感謝您的輸入。我正在使用最新版本的ServiceBus SDK,所以這不是問題。我爲我原來的問題添加了一些額外的信息,說明我爲什麼會這樣想。 – Jez

+0

這聽起來像一個錯誤。讓我檢查一下並回復你。 –

+0

我會很感激,很多大衛,它是我們能夠將消息複製到私人隊列爲我們的客戶的一件大事。 - 謝謝 – Jez