2

使用Java SDK(0.4.1)從SB隊列檢索郵件時,即使有問題的隊列爲空也會返回非空ReceiveQueueMessageResult 。在該結果上調用getValue()將返回非空BrokeredMessage。我應該如何告訴我已經在空隊列上調用了接收?很顯然,在分佈式併發系統中,查詢大小不是一個選項。使用Java SDK從空Azure ServiceBus隊列接收時接收非空郵件

我正在使用ReceiveAndDelete模式和隊列是新創建的,所以我知道它是空的。

根據文檔,對API的底層調用應返回StatusCode爲204.我找不到任何方法來訪問返回的結果或消息中的代碼。

+0

我在BrokeredMessage中的DelegateHttpsURLConnection類型的匿名內部類中找到了MessageHeaders(響應)隱藏的響應頭。果然,那裏有204個。無法通過BrokeredMessage上的界面(我可以找到)找到它。 – WillD 2013-03-22 19:11:30

回答

1

我們已經記錄了這個問題,我們現在正在進行修復。順便說一下,Windows Azure SDK for Java是開源的,如果您願意放棄版權給MSFT,您甚至可以提交自己的修復程序。源代碼可以發現https://github.com/WindowsAzure/azure-sdk-for-java

+0

已經分叉了項目。 – WillD 2013-03-25 14:55:03

+0

已經分叉了項目。 關於解決方案的一些評論。 1)對空隊列的調用,不應該導致一個ServiceException異常。 200系列狀態碼指示成功/正確的調用。返回的204代碼表明隊列爲空,這不是一個Exceptional或Error條件。 2)當前實現返回一個空的BrokeredMessage。內容長度爲0不應指示隊列爲空。在消息傳遞系統中通常會創建沒有主體的有效消息,但通過標頭/屬性傳達他們的意圖。 – WillD 2013-03-25 15:01:35

+0

已實施修復並在github id下提交了一個pull請求:billAtPros。 – WillD 2013-03-25 18:55:30