2016-12-15 201 views
2

我從RabbitMQ的網站實現的例子: RabbitMQ Example的RabbitMQ同樣的消息到每個消費者

我已經擴大它有一個按鈕的應用程序發送的消息。 現在我在兩臺不同的計算機上啓動了兩位消費者。 當我發送第一消息被髮送到電腦1的消息,則第二消息發送到計算機2時,THRID到計算機1等。

這是爲什麼,我怎麼可以改變每封郵件發送到每個消費者的行爲?

+0

您實現了生產者 - 消費者模式。如果您希望所有消費者都收到消息,則應實施發佈訂閱模式https://www.rabbitmq.com/tutorials/tutorial-three-java.html –

回答

2

這是爲什麼

正如Yazan所指出的,消息從在循環方式的單個隊列消耗。您看到的行爲是通過設計的,可以輕鬆擴大給定隊列的消費者數量。

如何更改將每條消息發送給每個消費者的行爲?

要讓每個消費者收到相同的消息,您需要爲每個消費者創建一個隊列並向每個隊列傳遞相同的消息。

做到這一點,最簡單的方法是使用fanout交換。這會將每條消息發送到綁定到交換機的每個隊列,完全忽略路由密鑰。

如果您需要對路由進行更多控制,可以使用topicdirect交換和管理路由密鑰。

無論您選擇哪種類型的交換,您都需要爲每個消費者設置一個隊列,並將每條消息路由到每個隊列。

1

你不能是controlled by the server檢查輪轉調度部分

它決定其消費又是。我不知道是否有一組算法您可以挑選,但最後服務器將控制這個(我想輪詢算法是默認值)

,除非你想使用的路由鍵與交流

+0

因此,不可能將RabbitMQ用作某種全球性通知發送者,將相同的消息發送給所有客戶端? – GreenEyedAndy

+0

哦,在這一刻對不起,我看到你關於路由的暗示 - 所以它應該有可能做到這一點。 – GreenEyedAndy

+0

@GreenEyedAndy它取決於你的要求,你可以看到這一點,看看它是否適合你的 – Yazan