Мы уже давно используем Mass Transit в производстве. Когда Mass Transit подключается к Rabbit, управление массовым транзитом на самом деле становится solid. Я полагаю, что это запуск и остановка виртуальных машин / контейнеров и кролика, который не работает, когда появляются ваши потребительские сервисы. Это настоящая проблема.
Способ, которым мы подошли к этому вопросу, состоит в том, чтобы переместить старта потребителя в другую поток службы и реализовать операцию повтора. Это позволит вашему сервису успешно начать и go в l oop и дождаться появления кролика. Важно отметить, что мы регистрируем, что служба не может подключиться к кролику, поэтому мы видим это.
code
private async Task StartAsync()
{
await Task.Run(() => {
bool isConnected = false;
while(!isConnected)
{
try
{
ServiceBus = CreateServiceBus();
ServiceBus?.Start();
isConnected = true;
_loggingService.Info("Messaging service bus started.");
}
catch(Exception ex)
{
_loggingService.Error("Cannot connect to message broker host.", ex);
Thread.Sleep(Defined_Time);
}
}
});
}
, тогда настройка шины выполняется точно так же, как в демонстрационной версии
private IBusControl CreateServiceBus()
{
var url = string.Format(CultureInfo.InvariantCulture, "rabbitmq://{0}", _messagingServerName);
var uri = new Uri(url);
_loggingService.DebugFormat("Starting messaging service bus: \"{0}\". Username=\"{1}\".", url, _messagingUsername);
return Bus.Factory.CreateUsingRabbitMq(sbc =>
{
Host = sbc.Host(uri, h =>
{
h.Username(_messagingUsername);
h.Password(_messagingPassword);
});
//Configure end points
});
}
Надеюсь, это поможет.