我的要求是讓訂閱者根據Web服務是否啓動來暫停處理消息。所以,當Web服務關閉時,消息應該繼續從發佈服務器發送到訂閱服務器隊列,並繼續堆疊,直到Web服務再次啓動。 (這些消息不應該進入錯誤隊列,而是留在訂閱者隊列中。)在發佈/訂閱模型中,如何根據某些外部狀態使訂閱者暫停處理?
我試圖使用取消訂閱,但發佈者停止發送消息,因爲取消訂閱似乎清除了RavenDB上的訂閱信息。我也嘗試在Transport類上設置MaxConcurrencyLevel,如果我將工作線程設置爲0,則發送到Subscriber的消息直接進入錯誤隊列。最後,我嘗試了Defer,它似乎將當前消息放入審計隊列中,並在超時完成時創建消息的克隆並將其本地發送到訂閱者隊列。另外,由於我必須不斷檢查服務狀態並保持推遲,所以我無法控制消息的順序,因爲我無法預測Web服務何時啓動。
達到我所解釋的行爲的最佳方式是什麼?我正在使用NServiceBus版本4.5。
用戶本身是否能夠檢查服務是否在線? –
是的,用戶可以檢查服務是否啓動。 –
如果服務關閉,您可以使用saga和超時。一旦處理程序與Web服務交互完成並回覆成功消息,即可完成傳奇。合理? –