【发布时间】:2020-03-06 10:47:14
【问题描述】:
我有以下不同的场景:
场景 1
RabbitMQ 已启动。
消费者通过 MassTransit 正确启动和订阅 RabbitMQ。
RabbitMQ 出现故障。
RabbitMQ 又涨了。
如果 Consumer 尝试使用 busControl.StartAsync(); 订阅,那么它将不再重新连接
如果消费者尝试使用 busControl.Start(); 订阅,那么它将正确地重新连接。
已经觉得这有点奇怪.. 但还好。
场景 2
RabbitMQ 已关闭
Consumer 上去尝试用 busControl.Start(); 订阅,会因为 RabbitMQ down 而失败
RabbitMQ 涨了
消费者无法重新连接到 RabbitMQ
但我需要以某种方式涵盖此案..
注册:
private static void RegisterRabbitMQ(SimpleInjectorContainer container)
{
container.AddMassTransit(x =>
{
x.AddBus(() => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(ConfigurationValuesProvider.Current.Get("RabbitMQHostName"), hostConfigurator =>
{
#if !DEBUG
hostConfigurator.Username(ConfigurationValuesProvider.Current.Get("RabbitMQUsername"));
hostConfigurator.Password(ConfigurationValuesProvider.Current.Get("RabbitMQPassword"));
hostConfigurator.UseCluster(c =>
{
string[] hostnames = ConfigurationValuesProvider.Current.Get("RabbitMQNodes").Split(';');
c.ClusterMembers = hostnames;
});
#endif
});
}));
});
}
出发巴士:
try
{
RegisterRabbitMQ(container);
var busControl = container.GetInstance<IBusControl>();
busControl.Start();
}
catch (Exception ex)
{
Log.Seq.Error("RabbitMQ broker is not reachable, BusControl cannot be started. ", ex);
}
提前致谢!
【问题讨论】:
标签: .net rabbitmq masstransit