2011-05-23 152 views
3

我已經閱讀了很多文章和博客,但我仍然不確定如何正確地集羣2個RabbitMQ節點。RabbitMQ集羣w/.Net客戶端

我讀過的RabbitMQ集羣指南:http://www.rabbitmq.com/clustering.html

我發現了關於API指南中一個神祕的羣ID,對如何獲取標識擺在首位沒有解釋:http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v2.4.1/rabbitmq-dotnet-client-2.4.1-api-guide.pdf

教訓在那StackOverflow帖子,基本上我需要我的客戶端知道羣集中的每個節點和故障轉移場景代碼:rabbitmq HA cluster

現在...我想要的行爲是更透明一點如果可能的話。在那裏我可能會使用客戶端上的「ClusterId」來使消費者集羣感知,然後希望庫知道隨機連接到任一節點來獲取消息。

授予我知道消息一次只能在一臺服務器上,所以我希望DotNet客戶端庫中的一些循環法術可以處理故障轉移情況。

我還希望從發佈者的角度來看,交換機會循環分發消息到集羣中的各個節點。交換機也可以集羣感知並處理故障轉移情況。

現在基於我的閱讀,它不像那樣工作...除非我錯過了一些東西。 如果我的知識是最新的,並且我必須編寫所有可識別羣集的業務,那麼......爲什麼RabbitMQ首先具有羣集功能?它是如何使用的?

有沒有辦法讓RabbitMQ沒有編碼那麼多的那種行爲?

感謝

+1

我感到困惑的RabbitMQ集羣。我現在對Erlang和RabbitMq有了更好的理解,以及爲什麼隊列沒有在集羣中複製,以及這對於可伸縮性沒有影響,這是我的主要目標。所有節點都知道每個隊列的存在位置,並轉發消息。因此,除非目標是高可用性,否則不需要複製相同的隊列,但我不是這種情況。感謝您的幫助Troydm。 – Lancelot 2011-06-24 15:57:36

回答

5

我使用HAProxy的故障切換和負載羣集節點之間平衡的RabbitMQ的,也對異常.NET客戶端,當節點出現故障時,您需要手動重新連接客戶端。

這是兩個節點羣集的HAProxy配置,節點在15672和25672端口上運行。 客戶端連接到5672端口。

global 
daemon 
log 127.0.0.1 alert 
log 127.0.0.1 alert debug 

defaults 
log global 
mode http 
option dontlognull 
option redispatch 
retries 3 
contimeout 5000 
clitimeout 50000 
srvtimeout 50000 

listen rabbitmq 0.0.0.0:5672 
    mode tcp 
    balance roundrobin 
    option tcpka 

server rabbit01 127.0.0.1:25672 check inter 5000 downinter 500 

server rabbit02 127.0.0.1:15672 check inter 5000 backup 

CUDOS到這個博客帖子http://www.joshdevins.net/2010/04/16/rabbitmq-ha-testing-with-haproxy/

+0

我已經按照你分享的鏈接。但該請求不是分佈在兩臺服務器上。消息僅在一臺服務器上發佈。 – 2012-05-11 07:38:37

+0

我認爲發佈的消息不會被分發,只是用於故障轉移,例如當一個主要經紀人失敗的情況下,客戶端將重新連接到第二個經紀人 – Troydm 2012-05-11 18:37:05

+0

我已經通過stackoverflow發佈了問題。檢查這個http://stackoverflow.com/questions/10547523/configure-haproxy-for-rabbitmq – 2012-05-12 04:02:13