簡體   English   中英

是否可以在RMQ .NET中指定多個連接點?

[英]Is it possible to specify multiple connection points in RMQ .NET?

正如標題所述,我想為RMQ .NET ConnectionFactory提供多個URI,希望它能自動故障轉移到第一個可用的URI,而不是僅限於一個URI。

建立

使用Docker Quickstart終端Docker Toolbox的一部分)我創建了四個容器 ,每個容器都在運行它的RMQ實例上。 我已按如下方式對RMQ節點進行了聚類:

  • 下游(node1和node2)
  • 上游(node3和node4)

下游節點與上游節點共享聯合隊列以增加吞吐量。

采用

我在C#中編寫了一個簡單的控制台應用程序,它將生成消息並將消息發布到node4(主上游RMQ實例)。

我想測試我的RMQ配置的冗余/自動故障轉移,因為我已經為AutomaticRecoveryEnableddocs )和TopologyRecoveryEnableddocs )設置了標志,並設置了聯合隊列

但是,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM