當消費者沒有聽力時,發佈到虛擬主題的消息會發生什麼?經紀人會持有一段時間,直到訂戶可用?虛擬主題/隊列和耐用性
更具體地說: 在T0和T1消息中發佈M0和M1。在T2,消費者C1連接,他會收到M0和M1嗎?很明顯,在T3和T4發佈的消息M2和M3將被C1接收,但是在T5連接的新消費者C2將接收什麼?所有消息,M2和M3,還是沒有?
當消費者沒有聽力時,發佈到虛擬主題的消息會發生什麼?經紀人會持有一段時間,直到訂戶可用?虛擬主題/隊列和耐用性
更具體地說: 在T0和T1消息中發佈M0和M1。在T2,消費者C1連接,他會收到M0和M1嗎?很明顯,在T3和T4發佈的消息M2和M3將被C1接收,但是在T5連接的新消費者C2將接收什麼?所有消息,M2和M3,還是沒有?
這取決於主題的性質: 如果主題是持久的(持久消費者訂閱了該主題),那麼代理將持有主題中的消息,直到所有持久消費者都使用該消息。 如果主題是非持久性的(沒有持久消費者),則該消息甚至不會被髮送到該主題,因爲將不會有持久訂閱。
對於你的榜樣,我會考慮你正在使用持久訂閱/消費者: 案例1:
這是因爲他們持有durable subscriptions 您使用耐用的話題時需要非常小心/隊列:如果消費者未取消訂閱,則代理將持有消息,直到消息存儲庫爆炸。您需要確保它不會發生(通過設置eviction policies和/或在消息上放置一段時間)。 當然,前面的示例會因消費者進行持久訂閱而有所不同。
如果使用非持久主題:
爲什麼不能有是觀察者/可觀察到的圖案 - 以上面的例子:
當M0是發佈,C1和C2(消費者訂閱)醒來並可以消費該事件?我認爲這種模式比耐用和非耐用 - 混合方式更好。
有兩種方法可以讓發佈到虛擬主題的消息充滿活力。第一個是通過持久訂閱者,另一個是發佈者以傳遞模式「PERSISTENT」發送消息。當消息以「PERSISTENT」的傳送模式發佈時,消息將保存在磁盤上,否則將保存在內存中。
我不得不問,到目前爲止你有什麼嘗試? – Eugene
還沒有時間嘗試,會做。現在對我來說只是理論上的事情,但我需要知道 –