访问Docker RabbitMQ集群在Masstransit上失败

我已经用RabbitMQ托pipe了两个Docker容器(请参阅下面的Docker文件)。 我使用rabbitmqctl join_cluster将两个RabbitMQ实例组合到了一个集群中。 两个RabbitMQ实例的集群名称都是rabbit@rabbit

如果我使用rabbitmq://localhost:5673/作为连接URL,则可以与群集的单个实例进行通信。 但是,如果我使用rabbitmq://rabbit@rabbit/ ,则MassTransit无法连接。

如何为MassTransit构build连接string,该连接string可以与RabbitMQ集群(具有故障切换pipe理)进行通信?

 public static IBusControl ConfigureBus(string rabbitMqUri, string userName, string password) { return Bus.Factory.CreateUsingRabbitMq(cfg => { var host = cfg.Host(new Uri(rabbitMqUri), hst => { hst.Username(userName); hst.Password(password); }); }); } 

Docker文件

  version: '2' services: rabbit: image: rabbitmq:management hostname: rabbit ports: - "5673:5672" - "15678:15672" environment: - RABBITMQ_ERLANG_COOKIE='mysecret' hamster: image: rabbitmq:management hostname: hamster ports: - "5674:5672" - "15679:15672" environment: - RABBITMQ_ERLANG_COOKIE='mysecret' 

集群名称没有提到物理连接参数。 rabbitmq://rabbit@rabbit/只在现有的RabbitMQ上下文中才有意义,但rabbitmq://rabbit@rabbit/不能解释客户端在哪里find你的节点。

在MassTransit中,您需要指定其他主机configuration来使用RabbitMQ集群:

 public static IBusControl ConfigureBus(string[] clusterNodes, string userName, string password) => Bus.Factory.CreateUsingRabbitMq(cfg => { var host = cfg.Host(new Uri(rabbitMqUri), h => { h.Username(userName); h.Password(password); h.UseCluster(cluster => { foreach (var node in clusterNodes) cluster.Node(node); }); }); }); 

其中clusterNodes是集群中物理节点的主机名或IP地址(不带rabbitmq://前缀)的列表。

我有一个类似的问题试图使用MassTransit连接到一个3节点RabbitMq群集使用下面的示例代码

 var busControl = Bus.Factory.CreateUsingRabbitMq(cfg => { var host = cfg.Host(new Uri("rabbitmq://myclustername"), h => { h.Username("admin"); h.Password("admin"); h.UseCluster(c => { c.Node("192.168.1.10:5672"); c.Node("192.168.1.10:5673"); c.Node("192.168.1.10:5674"); }); }); }); 

但是,我不断收到以下错误信息:

发生MassTransit.RabbitMqTransport.RabbitMqConnectionException HResult = 0x80131500消息=连接失败:admin @ mycluster:5672 / Source = TestPublisher StackTrace:位于C:_Dev \ RMQClusterDemo \ TestPublisher \ Program.cs中TestPublisher.Program.Main(String [] args) 50行

内部exception1:BrokerUnreachableException:没有指定的端点是可达内部exception2:ConnectFailureException:连接失败内部exception3:SocketException:没有这样的主机是已知的

看来它没有使用我提供的集群节点列表

如果我删除UseCluster部分并用任何一个节点的IP地址replace“MyCluster”,上面的示例对于单个节点将正常工作。

任何想法如何得到这个工作?