System.OperationCanceledException: агент остановлен или остановлен, дополнительные провокаторы не могут быть созданы - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть много приложений (около 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()));

}

...