c# - RabbitMqHostConfigurator UseCluster 方法不起作用
问题描述
我在 Amazon EC2 上设置了 RMQ 集群。现在,当我尝试通过设置集群成员来创建 RabbitMQ 主机时,每次都会收到Broker Unreachable异常。但是,如果我评论 UseCluster 方法,事情就会开始正常工作。但在这种情况下,我无法享受集群的全部好处。以下是我正在使用的一段代码:
foreach(var server in servers)
{
try
{
var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(new Uri(server), hst =>
{
hst.Username(settings.UserName);
hst.Password(settings.Password);
hst.UseCluster(c =>
{
c.ClusterMembers = servers;
});
});
//Check if the connection is reachable
host.Settings.GetConnectionFactory().CreateConnection();
registrationAction?.Invoke(cfg, host);
});
AddBusToContainer(container, bus);
return bus;
}
catch (BrokerUnreachableException ex)
{
EventLog.WriteEntry($"Error trying to connect to {server}", $"{ex}", EventLogEntryType.Error);
continue;
}
}
在上面的代码中,如果我注释 UseCluster 实现,我就能够成功地测试连接。但是我收到了带有上述代码的 BrokerUnreachableException 。
有谁知道在创建 MassTransit 总线时如何配置 RMQ 集群?这将非常有帮助。
提前致谢。
解决方案
要配置集群,您应该只配置一个总线实例(在您的示例中配置多个)。我不知道您使用的是什么版本的 MassTransit(鉴于语法,它看起来更旧),但如果您手动编码总线,这代表了当前的方法。
var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host("cluster", hst =>
{
hst.Username(settings.UserName);
hst.Password(settings.Password);
hst.UseCluster(c =>
{
foreach(var server in servers)
c.Node(server);
});
});
registrationAction?.Invoke(cfg);
});
AddBusToContainer(container, bus);
return bus;
虽然我建议在您的容器中使用较新的语法,以确保正确注册组件。
container.AddMassTransit(x =>
{
x.UsingRabbitMq(cfg =>
{
cfg.Host("cluster", hst =>
{
hst.Username(settings.UserName);
hst.Password(settings.Password);
hst.UseCluster(c =>
{
foreach(var server in servers)
c.Node(server);
});
});
registrationAction?.Invoke(cfg);
});
})
推荐阅读
- r - 如何将此嵌套的重复 json 对象解码为数据帧
- python - 根据差异对列表中最近的元素进行分组
- spring-boot - 如何将 Spring-Boot Web 服务转换为 Docker 映像?
- php - 我怎样才能摆脱这个错误解析错误:语法错误,意外'=>'(T_DOUBLE_ARROW)
- html - 在 Wordpress 摘录中跳过 Div
- android - 无法解决:com.google.android:flexbox:0.2.1
- php - 为什么“WHERE”查询不适用于 php 中的 SQLITE
- c++ - ctypes wintypes WCHAR 字符串 附加空格
- angular - Nativescript Angular 应用程序中 RadListView UI 中 itemRorder 值的动态更改
- android - TabLayout 的 setScrollPosition 和 getTabAt 方法有什么区别?