我必須實現這個場景:
一個外部應用程序發佈消息給rabbitmq。 此消息具有client_id屬性。我們可以將這個ID放在路由鍵或消息頭或其他一些屬性中。
我必須在交換路由邏輯中實現分片 - 消息應根據client_id範圍傳遞到特定隊列。Rabbitmq隊列分片
是否可以在標準交換中實施?
如果不是我應該以什麼交換爲基礎?
如何動態更改client_id範圍?
我必須實現這個場景:
一個外部應用程序發佈消息給rabbitmq。 此消息具有client_id屬性。我們可以將這個ID放在路由鍵或消息頭或其他一些屬性中。
我必須在交換路由邏輯中實現分片 - 消息應根據client_id範圍傳遞到特定隊列。Rabbitmq隊列分片
是否可以在標準交換中實施?
如果不是我應該以什麼交換爲基礎?
如何動態更改client_id範圍?
只需讓製作人員將足夠的信息放入導致郵件進入Exchange另一端的正確隊列的路由鍵中即可。
因此,例如,創建兩個名爲1和2的隊列,並將它們與匹配名稱的路由鍵綁定。然後讓生產者決定生成事件消息時使用哪個路由密鑰。名稱以字母a-m開頭的客戶會轉到1,n-z轉到2,您會明白。它將分片推送給製片人,但這對您的應用程序可能沒問題。
AMQP沒有任何明確的分片實現,但其架構應該可以幫助你做到這一點。
將消息分發到幾個隊列只是一個rabbitmq挑戰(和amqp規範的一部分),並且通過路由,您可以連接異構消費者來處理通過同一交換機路由的特定消息。因此,生產者應該推特定的密鑰以供特定的隊列/消費者使用...
您可以決定進行靜態分片,也許您有10個隊列,每個隊列有一個消費者。您可以實現一致的散列函數,使得密鑰爲CLIENT_ID%10.
另一種方法並沒有靜態解決方案可以提出,您可以嘗試在此架構上嘗試。
看一看rabbitmq plugin。它包含在從v3.6.0開始的RabbitMQ發行版中。
這不是理想的解決方案,因爲外部應用程序不應該知道內部邏輯。 – kolchanov
他們你可能不走運。 –
不僅如此,而且能夠在不更改發佈者的情況下添加和刪除更多隊列將會非常有用。 – mtsr