[英]Is it possible to specify multiple connection points in RMQ .NET?
正如標題所述,我想為RMQ .NET ConnectionFactory
提供多個URI,希望它能自動故障轉移到第一個可用的URI,而不是僅限於一個URI。
建立
使用Docker Quickstart終端 ( Docker Toolbox的一部分)我創建了四個容器 ,每個容器都在運行它的RMQ實例上。 我已按如下方式對RMQ節點進行了聚類:
下游節點與上游節點共享聯合隊列以增加吞吐量。
采用
我在C#中編寫了一個簡單的控制台應用程序,它將生成消息並將消息發布到node4(主上游RMQ實例)。
我想測試我的RMQ配置的冗余/自動故障轉移,因為我已經為AutomaticRecoveryEnabled
( docs )和TopologyRecoveryEnabled
( docs )設置了標志,並設置了聯合隊列 。
但是,RMQ .NET庫提供的ConnectionFactory
似乎不支持指定多個URI( docs )。 所以我不得不手動編寫節點切換時處理節點之間的切換 - 我這樣做是通過捕獲節點不再可訪問時拋出的異常然后ping所有節點來查看哪些節點是活動的。
有沒有辦法為ConnectionFactory提供多個Rabbit端點,以便它可以自動進行故障轉移?
如果查看ConnectionFactory,它可以創建與主機列表的連接
/// <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:pass@hostName:port/vhost";
IConnection conn = factory.CreateConnection();
將CreateConnection({UriHostname})
單個元素列表調用CreateConnection({UriHostname})
如果你需要不同集群之間的連接列表(不同的vhost,用戶名,密碼......),那么答案是否定的,你不能用關鍵客戶端做到這一點。 如果只有主機名改變,我可能會工作。
使用由pivotal提供的C#客戶端,沒有。 你將不得不做你正在做的事我害怕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.