簡體   English   中英

如何使用RabbitMQ主機連接參數列表

[英]How to use RabbitMQ list of hosts connection parameter

我在C#rabbitMQ庫中創建連接時嘗試使用IList<string>參數:

IConnection CreateConnection(IList主機名)

我的代碼如下:

    private IConnection CreateConnection()
    {
        var connectionFactory = new ConnectionFactory
        {
            UserName = _userName,
            Password = _password,
            VirtualHost = _vhost,
            AutomaticRecoveryEnabled = DEFAULT_AUTO_RECOVER,
            RequestedHeartbeat = HEARTBEAT_TIMEOUT_SECONDS,
            Port = AmqpTcpEndpoint.UseDefaultPort,
        };
        // _hosts contains valid IPs "###.###.###.###"
        return connectionFactory.CreateConnection(_hosts);
    }

但無論我對hosts參數的想法如何,它似乎都沒有連接(我得到“沒有指定的端點可以訪問”)

即使我的列表只包含一個元素。

現在,如果我使用這樣的單個主機實現,它可以正常工作:

    private IConnection CreateConnection()
    {
        var connectionFactory = new ConnectionFactory
        {
            UserName = _userName,
            Password = _password,
            VirtualHost = _vhost,
            AutomaticRecoveryEnabled = DEFAULT_AUTO_RECOVER,
            RequestedHeartbeat = HEARTBEAT_TIMEOUT_SECONDS,
            Port = AmqpTcpEndpoint.UseDefaultPort,
            HostName = _hosts.First() // or just one string
        };
        return connectionFactory.CreateConnection();
    }

我知道RabbitMQ建議不要在客戶端上存儲這組主機,但我只是想讓他們提供的方法工作。

我認為您可能需要為連接工廠的HostnameSelector屬性設置一個值

private IConnection CreateConnection()
{
    var connectionFactory = new ConnectionFactory
    {
        UserName = _userName,
        Password = _password,
        VirtualHost = _vhost,
        AutomaticRecoveryEnabled = DEFAULT_AUTO_RECOVER,
        RequestedHeartbeat = HEARTBEAT_TIMEOUT_SECONDS,
        Port = AmqpTcpEndpoint.UseDefaultPort,
        HostnameSelector = new RandomHostnameSelector()
    };
    // _hosts contains valid IPs "###.###.###.###"
    return connectionFactory.CreateConnection(_hosts);
}

RabbitMQ提供了RandomHostnameSelector

class RandomHostnameSelector : IHostnameSelector
{
    string IHostnameSelector.NextFrom(IList<string> options)
    {
        return options.RandomItem();
    }
}

或者您可以創建自己的IHostnameSelector實現,以擁有自己的主機選擇策略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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