Кластерное соединение RabbitMQ с использованием MassTransit дает исключение BrokerUnreachableException - PullRequest
1 голос
/ 10 мая 2019

У меня точно такая же проблема, как и у этого парня: https://github.com/MassTransit/MassTransit/issues/975.

В целях тестирования у меня на компьютере разработчика есть кластер из 3 узлов, следующие узлы используются узлами:

amqp rabbit 5672
http rabbit 15672

amqp rabbit1 6001
http rabbit1 15674

amqp rabbit2 6002
http rabbit2 15673


И я пытаюсь подключиться следующим образом:

var rabbitMqHost = busFactoryConfig.Host(new Uri("rabbitmq://localhost:6002"), hostConfig =>
{
  hostConfig.Username("username");
  hostConfig.Password("password");
  hostConfig.UseCluster(c =>
  {
    c.ClusterMembers = new[]
    {
      "rabbitmq://localhost:6001",
      "rabbitmq://localhost:6002",
      "rabbitmq://localhost:5672"
    };
  });
});

Но я продолжаю получать:

Ошибка подключения: admin @ localhost: 6002 /

BrokerUnreachableException: ни одна из указанных конечных точек не была доступна

Опробована каждая возможность, ничего не работает.Если я удаляю UseCluster, то тот же порт host: работает, что странно.

Использование имени кластера в качестве имени хоста (например, busFactoryConfig.Host("rabbit2@{hostname-fqdn}", "/", ...) приводит к следующей ошибке:

EndpointNotFoundException: Хост не найден по указанному адресу: rabbitmq: // rabbit2 @ {hostname-fqdn} / bus- {hostname} -RabbitMQConsumer-rnuoyyrtr44jcxutbdmpkkikdu? Durable = false & autodelete = true

RabbitMQ v3.7,14, Erlang v21,3

Ответы [ 3 ]

0 голосов
/ 10 мая 2019

Попробуйте указать свойство AddressFamily в CreateConnection.

 var factory = new RabbitMQ.Client.ConnectionFactory
{
    UserName = "username",
    Password = "password"
};
var conn  = factory.CreateConnection(new [] { new AmqpTcpEndpoint("hostname") {AddressFamily = AddressFamily.InterNetwork}});
0 голосов
/ 10 мая 2019

Хорошо, я понял.

Попробуйте это после создания rabbitMqHost

var rabbitMqHost = busFactoryConfig.Host(new Uri("rabbitmq://rabbit2/"), hostConfig =>
{
    hostConfig.Username("username");
    hostConfig.Password("password");
    hostConfig.UseCluster(c =>
    {
        c.Node("rabbit");
        c.Node("rabbit1");
        c.Node("rabbit2");
    });
});

rabbitMqHost.Settings.GetConnectionFactory().Endpoint.AddressFamily = AddressFamily.InterNetwork;
0 голосов
/ 10 мая 2019

Я думаю, что я решил свою проблему после 1000 попыток следующим образом:

var rabbitMqHost = busFactoryConfig.Host(new Uri("rabbitmq://rabbit2/"), hostConfig =>
{
    hostConfig.Username("username");
    hostConfig.Password("password");
    hostConfig.UseCluster(c =>
    {
        c.Node("rabbit");
        c.Node("rabbit1");
        c.Node("rabbit2");
    });
});

И я добавил следующее в файл hosts:

127.0.0.1 rabbit2

Но он все еще портится с портами(потому что все узлы являются localhost) ... Так что все равно безуспешно.

...