c# - 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);
}
});
});
});
解决方案
配置集群时,主机“地址”是一个逻辑名称,不用于连接任何 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"));
推荐阅读
- nlp - 使用 HuggingFace 库构建语言模型(即下一个单词预测器)
- javascript - 在 forEach 完成之前返回的数据
- python - 如何通过导入填充全局命名空间?
- javascript - JSON.parse() 行为不同的原因是什么?
- php - 注意:检查 PHP 数组中的值是否存在于数据库中时,数组到字符串的转换
- c# - 如何在协程中使用缓动来更改浮点值?
- flutter - 改变抽屉颜色不显示颜色悬停
- c++ - 如何打开特定窗口到 wxWidgets 上的特定按钮?
- javascript - 在不使用异步等待的情况下等待 API 调用。调用完成后需要维护用户启动的执行上下文
- node.js - NestJS - 如何使用不同的配置多次注册动态模块提供程序?