2016-09-29 9 views
0

2つのノード(ウサギとウサギ1)を持つRabbitmqクラスタを作成しました。私たちは、下記のを使用してノードに接続するために使用されるクラスタリング前http://www.rabbitmq.com/clustering.htmlhttp://www.rabbitmq.com/ha.htmlRabbitmq - C#からクラスタに接続する

に従うことにより、高可用性のキューになるように構成されている4つのキューは、私たちがクラスタに対処しなければならない

var factory = new ConnectionFactory(){ HostName = _rabbitMQ_Hostname, UserName = _rabbitMQ_Username, Password = _rabbitMQ_Password}; 

using (var connection = factory.CreateConnection()) 
using (var channel = connection.CreateModel()) 
{ 
    channel.QueueDeclare(queue: _autoCancellationPNS_QueueName, 
    durable: true, 
    exclusive: false, 
    autoDelete: false, 
    arguments: null); 

    string message = appointmentId.ToString(); 
    var body = Encoding.UTF8.GetBytes(message); 
    IBasicProperties properties = channel.CreateBasicProperties(); 
    properties.DeliveryMode = 2; 
    channel.BasicPublish(exchange: _rabbitMQ_Exchange, 
     routingKey: _autoCancellationPNS_RoutingKey, 
     basicProperties: properties, 
     body: body); 
    returnMessage.ShortMessage = "Added to queue"; 
    returnMessage.LongMessage = "Added to queue"; 
    logger.Debug("|Added to queue"); 
} 

どうスニペットがありますか?

答えて

0

あなたが好むノードに接続できます。

交換とキューは、クラスタ全体で表示されます。

使用してクライアントにのみバランサを知っている必要がありますので、ノードの前面にロードバランサは、一般的に行われているIP/DNS

clients ----> balancer -----> RabbitMQ cluster 
0

.NETクライアントは、(私の知る限り)いずれかを提供していませんこれをサポートします。クラスタ上のノードを選択して接続するには、自分で何かを構築します。あなたは、ラウンドロビン戦略を実装する場合

例えば、擬似コードは、あなたが今接続戦略、再試行、接続試行の回数を考える必要があります。もちろん、

Get list of hostname/port combinations that form the cluster 
do { 
    try { 
     connect to next hostname in the list 
    } catch (rabbit connection failed) { 
     maybe log a warning 
    } 
} while not connected 

ようになり、指数バックオフ、...

...私は強くこの種の機能(とはるかに)を提供するライブラリを探すことを強く勧めます。そのようなライブラリの1つはEasyNetQ(Nugetで利用可能)、NServiceBus(RabbitMq Transport付き)またはMassTransitも興味深いかもしれません。

別のアプローチは、個々のノードの前にインテリジェントなロードバランサを設定することです(myrabbitcluster.mycompany.comはクラスタノード間の負荷分散を行い、ノードの障害を検出して障害のあるノードをクラスタから除去する必要があります) )。

1

RabbitMQ.Clientは、複数のホストへの接続を1年間サポートしています。 pull request #92に修正されました。

using (var connection = connectionFactory.CreateConnection(hostList)) 
using (var channel = connection.CreateModel()) 
{ 

} 

ただし、この方法では、すべての回復などを自分で実行する必要があります。約1年前、EasyNetQクライアントの安定性に大きな問題がありましたが、クラスタ化された環境RawRabbitを使用し始めて以来、実際には問題はありませんでした。

関連する問題