2017-09-28 32 views
1

重試的消息,我能夠寫一個自定義的重試政策,使用SQL Server爲遞延消息存儲。但是現在,爲了可擴展性的原因,我想運行多個部署在不同機器上的工作人員(消息處理程序任務)。由於這個原因,我希望有一箇中心位置來讀取延遲消息(如從隊列中讀取),而不是從sql server讀取數據。配置爲customl隊列中滷麪

有什麼辦法來存儲在隊列中的延遲的消息?這是更好的方法嗎?這樣做會更好嗎?

回答

1

有什麼辦法來存儲在隊列中的延遲的消息?這是更好的方法嗎?

不與我所熟悉的:)大多數隊列是真的擅長fifo任何隊列,這與遞延消息的延遲時間可以在每封郵件上改變衝突(至少在一般情況下)。

訪問可能下令從他們發送的順序完全不同的信息的渴望,使得與二級索引數據庫的一個很好的技術,用於存儲延遲的消息。

會是什麼更好的方法來做到這一點?

雖然我不確定我是否理解您認爲在SQL Server中存儲延期郵件的問題。

當然,如果你有很多端點推遲的消息,你可能需要使用「外部超時經理人」而不是每個單獨的端點調查數據庫 - 這可以通過在你的端點這樣做可以了:

Configure.With(...) 
    .(...) 
    .Timeouts(t => t.UseExternalTimeoutManager("timeouts")) 
    .Start(); 

,然後簡單地開始與配置的超時存儲和輸入隊列timeouts的端點。

+0

我喜歡有外部超時管理器的解決方案,這就是我正在尋找的(而不是每個工人輪詢數據庫)。但是我可否知道這個外部超時管理器正在運行?如果該超時管理器崩潰,其餘的工作人員是否會選擇另一個超時管理器? –

+0

如果超時管理器在未重啓的情況下停止或崩潰,則沒有端點將收到它們的延遲消息。新的延遲消息將在「超時」隊列中排隊。超時管理器只是一個普通的Rebus端點,您需要制定。 – mookid8000

+0

如果您使用中央數據庫,例如SQL Server,並且如果您使用某種基於代理的排隊系統(例如RabbitMQ),則在兩臺不同的計算機上部署兩個超時管理器實例以實現冗餘相當簡單。 – mookid8000