2017-09-05 60 views
0

使用隊列客戶端創建輔助角色時的模板代碼提供了消息泵實現。代碼中有一條評論:在azure QueueClient上調用close()是否優雅地停止消息泵?

// Initiates the message pump and callback is invoked for each message that is received, calling close on the client will stop the pump. 
sourceClient.OnMessage(received => 
{ 
    //blah blah implementation 
}); 

當你在sourceClient上調用close()時會發生什麼?目前正在處理的消息是否繼續?即這是消息泵的正常關閉嗎?或者將調用關閉影響消息泵當前正在處理的消息?

的文件將導致我相信它是,但有這將意味着有一個消息泵沒有正常關機機制這個優秀的反饋資料:https://feedback.azure.com/forums/216926-service-bus/suggestions/4345733-provide-gracefull-shutdown-feature-to-message-pump

那麼,是什麼souceClient.close()實際上做?

回答

1

在完整框架客戶端(WindowsAzure.ServiceBus)QueueClient不會正常停止消息泵。未完成的飛行中的信息會增加其遞送計數。

那麼souceClient.close()實際上做了什麼?

該客戶端是一個封閉的源項目。最好的猜測是提出一個問題here

+0

因此,它們會在超時後重新出現在消息隊列中?他們不會迷路? – andrea

+0

消息永遠不會丟失。他們會被重試,除非超過最大交付次數,然後郵件將被移至死信隊列。 –

+0

好的謝謝。因此,正常關機的真正問題是消息被多次處理,或部分處理,然後再次處理,而不是丟失。 – andrea