首页 > 解决方案 > GetSendEndpoint 需要一个地址作为参数,当它连接到一个 3 节点集群 RMQ 时要传递什么?

问题描述

如下,GetSendEndpoint期望Uri address作为参数。但是我们有一个具有 3 个节点(3 个地址)的 RMQ 集群,那么我必须通过GetSendEndpoint什么?

namespace MassTransit
{
  public interface ISendEndpointProvider : ISendObserverConnector
  {
    Task<ISendEndpoint> GetSendEndpoint(Uri address);
  }
}

总线连接到集群如下:

//cluster is a list of strings containing the cluster node hostnames

_mtBus = Bus.Factory.CreateUsingRabbitMq(busFactoryConfig =>
{
    busFactoryConfig.Host(new Uri($"rabbitmq://{cluster.First()}:5671"), hostConfig =>
    {
        hostConfig.Username(_username);
        hostConfig.Password(_password);
        hostConfig.UseSsl(x => { });
        hostConfig.UseCluster(c =>
        {
            foreach (var node in cluster)
            {
                c.Node(node);
            }
        });
    });
});

标签: c#masstransit

解决方案


配置集群时,主机“地址”是一个逻辑名称,不用于连接任何 RabbitMQ 节点。这是您应该使用的名称。更改配置,如下所示:

var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    cfg.Host(new Uri("rabbitmq://production/vhost"), h =>
    {
        h.Username(_username);
        h.Password(_password);
        h.UseCluster(c =>
        {
            c.Node("server1");
            c.Node("server2");
            c.Node("server3");
        });
    });
});

bus.Start();

var endpoint = bus.GetSendEndpoint(new Uri("rabbitmq://production/vhost/my_queue"));

推荐阅读