2016-04-17 4 views
4

タイトルとして、RMQ .NET ConnectionFactoryに複数のURIを提供したいと考えています。単一のURIに限定されるのではなく、最初に利用可能なものに自動的にフェイルオーバーされることを願っています。私はそれで、それぞれがそれで実行されているRMQインスタンス上にある、4つのコンテナを作成しましたドッカークイックスタートターミナルドッカーツールボックスの一部)を使用してRMQ .NETで複数の接続ポイントを指定することはできますか?

セットアップ

。私はRMQノードをクラスタ化している 次のよう

  • 下流(ノード1とノード2)
  • 上流(ノード3とノード4)

下流ノードが上流Federated Queueを共有ノードを使用してスループットを向上させます。

使用

私はノード4にメッセージを生成し、公開するC#で簡単なコンソールアプリケーション(主上流RMQインスタンスを)書かれています。

私はAutomaticRecoveryEnableddocs)とTopologyRecoveryEnableddocs)のフラグを設定しているように私RMQ構成の冗長化/自動フェイルオーバーをテストしたいと連合キューセットアップを持っているでしょう。

ただし、RMQ .NETライブラリによって提供されるConnectionFactoryは、複数のURI(docs)の指定をサポートするようには見えません。ノードがアクセスできないときにスローされた例外をキャッチし、どのノードがアクティブであるかを調べるためにすべてのノードに対してpingを実行することで、手動でコードを処理しなければなりませんでした。

自動的にフェールオーバーできるようにConnectionFactoryに複数のRabbitエンドポイントを与える方法はありますか?

+1

pivotalによって提供されたC#クライアントを使用しています。あなたは、あなたがImを恐れていることを正確にやらなければなりません。 –

+0

@ chris.ellisの回答ありがとうございます。これを回答として追加したい場合、私はそれを受け入れられたとしてマークするのが嬉しいです。 :-) –

+0

心配する必要はありません、申し訳ありません、それはより有用なものではありませんでした。 –

答えて

1

pivotalによって提供されるC#クライアントを使用すると、あなたは、あなたがImを恐れていることを正確にやらなければなりません。

2

あなたはConnectionFactoryを見れば、それはlist of hosts

/// <summary> 
    /// Create a connection using a list of hostnames. The first reachable 
    /// hostname will be used initially. Subsequent hostname picks are determined 
    /// by the <see cref="IHostnameSelector" /> configured. 
    /// </summary> 
    /// <param name="hostnames"> 
    /// List of hostnames to use for the initial 
    /// connection and recovery. 
    /// </param> 
    /// <returns>Open connection</returns> 
    /// <exception cref="BrokerUnreachableException"> 
    /// When no hostname was reachable. 
    /// </exception> 
    public IConnection CreateConnection(IList<string> hostnames) 
    { 
     return CreateConnection(hostnames, null); 
    } 

ところで、以下のコードを使用して接続を作成することができます

ConnectionFactory factory = new ConnectionFactory(); 
factory.Uri = "amqp://user:[email protected]:port/vhost"; 
IConnection conn = factory.CreateConnection(); 

は、単一の要素

のリストを CreateConnection({UriHostname})を呼び出しますが

異なるクラスタ(別の仮想ホスト、ユーザー名、パスワードなど...)間に接続リストが必要な場合は、答えは「いいえ」です重要なクライアントと一緒にはできません。ホスト名だけが変更された場合、私は動作するかもしれません。

+0

回答とサンプル@Nicolasをありがとう、残念ながら私はこれがクラスタ間で発生する必要があります。 –

関連する問題