2017-07-28 68 views
0

我正在嘗試爲Azure服務總線隊列或主題安排消息的最佳方式,同時保留打開選項以立即發送消息而不是預定消息。如果我嘗試在第一封郵件的預定時間或之後發送替換郵件,我想確保自己能夠防止創建重複郵件。當您嘗試取消已排入隊列的預定Azure服務總線消息時會發生什麼情況?

如果我在消息已經入隊之後嘗試使用CancelScheduledMessageAsync(對於QueueClient和TopicClient類)取消預定消息,會發生什麼情況?它會拋出異常嗎?

+0

當你嘗試了什麼事它? – mjwills

+0

我將在下週嘗試它。只是想知道有沒有人知道,因爲我沒有找到有關它的文檔。 –

回答

1

根據您的描述,我找到了一個博客(Canceling Scheduled Messages)談論類似的問題。

3.3.1版本之前,需要計劃的消息被成爲可見之前取消了,這是不可能的。任何嘗試訪問其值的結果都將導致InvalidOperationException。因此,任何未來計劃並且不再需要的消息都會被「卡住」在經紀人身上,直到晚些時候。

使用Microsoft Azure Service Bus> = 3.3.1 QueueClientTopicClient可用於安排消息並稍後取消消息。

而且,我已經通過下面的代碼測試它在我身邊:

BrokeredMessage brokerMsg= new BrokeredMessage("Hello World!!!"); 
long sequenceNumber = await queueClient.ScheduleMessageAsync(brokerMsg, DateTimeOffset.UtcNow.AddSeconds(30)); 

await Task.Delay(TimeSpan.FromMinutes(1)); 
// Cancel scheduled message 
await queueClient.CancelScheduledMessageAsync(sequenceNumber); 

我登錄到蔚藍的門戶網站,並檢查活動消息COUNT調度消息COUNT。它變得活躍之前,我可以取消計劃的消息,但如果我通過sequenceNumber取消計劃的消息調度消息被激活後,那麼我將如下檢索異常:

enter image description here

+0

感謝您檢查Bruce!因此,如果我理解正確,那麼當您在隊列中激活並嘗試取消郵件時,您看到引發的異常嗎? –

+0

是的,我在隊列消息被使用之前調用了取消操作。如果預定的信息已被激活,則無論該信息是否已被使用,都不能取消該信息。 –

相關問題