5

我需要建立一個使用發佈/訂閱總線(例如Mule,ZeroMQ,RabbitMQ)的系統,但是這些文獻都暗示用戶應用程序可靠地接收來自主題的消息一旦Pub/Sub公交車能夠傳遞信息,他們就會認購。PubSub +可靠的消息傳遞給不可靠的目前用戶

我有一個系統,其中一些應用程序將可靠地連接到發佈/訂閱總線,但其他應用程序不會一直處於活動狀態或連接到總線。

明顯的解決方案是在不可靠的應用程序和發佈/訂閱總線之間建立某種「存在」協議,以便「現在」的應用程序立即獲得他們的消息,「不存在」應用程序將其消息排隊在某種類型的持久緩衝區中,並且只要他們完成「在場握手」,排隊的消息就會傳送到新近出現的應用程序。

是否有任何內置這種功能的發佈/訂閱總線,或者是否有任何這樣的開源附加軟件?你能指出我描述這個的任何URL嗎?

回答

4

您可以通過任何符合AMQP的代理(如RabbitMQ)輕鬆實現此行爲。

爲您的使用模式選擇正確的交換類型。如果您總是發送至絕對命名的目的地,您將需要使用direct交換,例如chat.messages

如果要執行基於模式的路由,則需要使用topic交換。然後,您可以根據模式(例如chat.messages.*)進行路由。

路由在RabbitMQ Tutorials中有更詳細的描述。

要創建您提到的持久訂閱種類,請讓每個訂閱者創建一個該訂閱者專用的隊列。隊列然後綁定到您選擇的交換機上的相關路由鍵。

由於每個用戶都有自己的隊列,當用戶處於非活動狀態或斷開連接時,消息將在活動時被消費,並被存儲。

0

你沒有提到你所選擇的語言,但在Java中,你可以使用durable subscribersJMS做到這一點。 JMS的任何實現(there are many,包括前述的RabbitMQ)都將支持此功能。