У меня есть много приложений (около 80), работающих в их собственных docker контейнерах. Все они создают управление шиной. Я пользуюсь транспортом кролика.
Когда я запускаю все контейнеры, включая кролика, одновременно, у некоторых приложений возникают проблемы с правильной инициализацией управления шиной. Все сообщения создают исключение OperationCanceledException. Не вижу других предупреждений / ошибок, зарегистрированных во время запуска приложения. Перезапустите контейнер, чтобы устранить проблему. Я думаю, что это начало происходить после обновления с 5.5 до 6.2.
трассировка стека:
MassTransit.RequestCanceledException: запрос был отменен, RequestId: 0b1c0000-0001-0c00-dec8- 08d7daa945f5 ---> System.OperationCanceledException: агент остановлен или остановлен, дополнительные провокаторы не могут быть созданы. в GreenPipes.Caching.Internals.NodeValueFactory 1.CreateValue()
at GreenPipes.Caching.Internals.NodeTracker
1.AddNode (INodeValueFactory 1 nodeValueFactory)
--- End of inner exception stack trace ---
at MassTransit.Clients.ClientRequestHandle
1.SendRequest () в MassTransit.Clients.ResponseHandlerConnectHandle`1.GetTask ()
I используется * для внедрения экземпляра IBusControl его создание выглядит следующим образом:
bus = Bus.Factory.CreateUsingRabbitMq(rabbit =>
{
rabbit.Durable = true;
rabbit.Host(new Uri(serverUri), h =>
{
h.Username(settings.Username);
h.Password(settings.Password);
});
rabbit.PrefetchCount = settings.ReceiverPrefetchCount;
rabbit.UseMessageScheduler(SchedulerQueueUri);
rabbit.UseAppMetrics(metrics);
rabbit.BusObserver(observer);
foreach (var receiveEndpoint in receiveEndpoints)
{
rabbit.ReceiveEndpoint(receiveEndpoint.Queue, rec =>
{
ConfigureCommonFilters(componentContext, brokerSettings, rec);
rec.PrefetchCount = brokerSettings.ReceiverConcurrencyLimit;
foreach (var endpointAction in receiveEndpoint.EndpointActions)
{
endpointAction(rec, brokerSettings, componentContext);
}
});
});
}
Мой сервис запущен с использованием
IWebHostBuilder.UseStartup<Startup>().Build().RunAsync(_cancellationTokenSource.Token).ConfigureAwait(false);
При запуске
public virtual void Configure(
IWebHostEnvironment env, IApplicationBuilder app, IHostApplicationLifetime appLifetime, IServiceProvider serviceProvider
)
{
var busControl = serviceProvider.GetService<IBusControl>();
// other configuration
appLifetime?.ApplicationStarted.Register(() => retry.RunReliably(() => busControl?.Start()));
appLifetime?.ApplicationStopping.Register(() => retry.RunReliably(() => busControl?.Stop()));
}