2016-04-17 32 views
4

作爲標題狀態,我想爲RMQ .NET ConnectionFactory提供多個URI,希望它能自動故障切換到第一個可用的URI,而不是僅限於一個URI。是否可以在RMQ .NET中指定多個連接點?

設置

使用泊塢快速入門終端(的泊塢窗工具箱一部分)我已經創建四個集裝箱,每個都有它在其上運行RMQ實例。 我已經聚集了RMQ節點如下:

  • 下游(節點1和節點)
  • 上游(節點3和節點4)

下游節點與上游共享Federated Queue節點來增加吞吐量。

使用

我已用C#編寫一個簡單的控制檯應用程序,將產生和消息發佈到節點4(初級上游RMQ實例)。

我想測試我RMQ配置的冗餘/自動故障轉移,因爲我已經設置標誌爲AutomaticRecoveryEnableddocs)和TopologyRecoveryEnableddocs)和具有聯合隊列設置。

但是,由RMQ .NET庫提供的ConnectionFactory似乎不支持指定多個URI(docs)。所以我不得不手動編寫處理節點間切換的處理過程 - 我通過捕獲節點不再可訪問時拋出的異常,然後ping所有節點以查看哪個節點處於活動狀態來執行此操作。

有沒有辦法給ConnectionFactory多個Rabbit端點,以便它可以自動進行故障轉移?

+1

使用由關鍵提供的C#客戶端,你將不得不做你害怕的事情。 –

+0

謝謝你的答案@ chris.ellis。如果您想將其作爲答案本身,我很樂意將其標記爲已接受。 :-) –

+0

不用擔心,對不起,這不是一個更有幫助的。 –

回答

1

使用由關鍵提供的C#客戶端,你將不得不做你害怕的事情。

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,不幸的是我需要這種情況發生在集羣之間。 –

相關問題