Я использую rabbitmq для создания шины.
После обновления с 6.2.2 до 6.2.3 я получаю исключение AlreadyClosedException в моей саге. Похоже, это относится к повторной доставке сообщений, так как, когда я отключаю повторную доставку, эти исключения go прочь.
Конфигурация повторной доставки
rec.UseScheduledRedelivery(r =>
{
r.Handle<Exception>(IsTransientException);
r.Ignore<Exception>(IsHarmlessException);
r.Intervals(TimeSpan.FromSeconds(FirstRedeliveryIntervalInSeconds),
TimeSpan.FromSeconds(SecondRedeliveryIntervalInSeconds),
TimeSpan.FromSeconds(ThirdRedeliveryIntervalInSeconds));
});
Трассировка ошибки:
RabbitMQ.Client.Exceptions.AlreadyClosedException: Уже закрыто: операция AMQP была прервана: причина закрытия AMQP, инициированная Peer, код = 406, текст = 'PRECONDITION_FAILED - недопустимое истечение срока действия' -34318 ': { value_negative, -34318} ', classId = 60, methodId = 40 в RabbitMQ.Client.Impl.SessionBase.Transmit (Command cmd) в RabbitMQ.Client.Impl.ModelBase.TransmitAndEnqueue (команда cmd, IRpcContinuation k в Rab). Impl.ModelBase. , Логическое значение nowait, IDictionary 2 arguments)
at RabbitMQ.Client.Impl.ModelBase.ExchangeDeclare(String exchange, String type, Boolean durable, Boolean autoDelete, IDictionary
2 аргумента) в MassTransit.RabbitMqTransport.Contexts.RabbitMqModelContext. <> C__DisplayClass16_0.b __0 () в System.Threading.Tasks.Task.InnerInvoke () в System.Threading.ExecutionContext.RunInternal (ExecutionContext creationContext, обратный вызов ContextCallback, состояние объекта) --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- в System.Threading.Tasks.Task.ExecuteWithThreadLocal (Task & currentTaskSlot, Thread threadPoolThread) --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- в MassTransit.RabbitMqTransport.Pipeline.ConfigureTopologyFilter 1.ConfigureTopology(ModelContext context)
at MassTransit.RabbitMqTransport.Pipeline.ConfigureTopologyFilter
1. <класс c_Display . <- Send> b__0> d.MoveNext () --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- в GreenPipes.PipeExtensions.OneTimeSetup [T] (контекст PipeContext, Fun c2 setupMethod, PayloadFactory
1 payloadFactory) в MassTransit.RabbitMqTransport.Pipeline.ConfigureTopologyFilter 1.GreenPipes.IFilter<MassTransit.RabbitMqTransport.ModelContext>.Send(ModelContext context, IPipe
1 следующий) в MassTransit.RabbitMqTransport.Transport.RabbitMqMoveTransport.Move (контекст ReceiveContext, действие 2 preSend)
at MassTransit.Pipeline.Filters.ErrorTransportFilter.GreenPipes.IFilter<MassTransit.ExceptionReceiveContext>.Send(ExceptionReceiveContext context, IPipe
1 следующий) в MassTransitFile.Filter.FilterFile.File.File.File.File.File.File.File.File.GF Отправить (Excep контекст ‑ReceptContext, IPipe 1 next)
at GreenPipes.Filters.RescueFilter
2.GreenPipes.IFilter.Send (контекст TContext, IPipe 1 next)
at MassTransit.Pipeline.Filters.DeadLetterFilter.GreenPipes.IFilter<MassTransit.ReceiveContext>.Send(ReceiveContext context, IPipe
1 следующий) в MassTransit.Transports.ReceivePipeDispatcher.Dispatch (контекст ReceiveContext, ReceiveLockContext receiveLock) в MassTransit.Transports.ReceptPort context, ReceiveLockContext receiveLock) в MassTransit.Transports.ReceivePipeDispatcher.Dispatch (контекст ReceiveContext, ReceiveLockContext receiveLock) в MassTransit.RabbitMqTransport.Pipeline.RabbitMqBasicConsumer. <> c__DisplayClass12_0. d.MoveNext ()
Также:
---> MassTransit.RabbitMqTransport.MessageNotConfirmedException: rabbitmq: // mq / scheduler => Сообщение не подтверждено: PRECONDITION_FAILED - недопустимый срок истечения '-34318': {value_negative, -34318} в MassTransit.RabbitMqTransport.Contexts.RabbitMqModelContext.MassTransit.RabbitMqTransport.ModelContext.BasicPublishAsyning тело, логическое значение awaitAck) в MassTransit.RabbitMqTransport.Transport.RabbitMqSendTransport.SendPipe 1.Send(ModelContext modelContext)
at MassTransit.RabbitMqTransport.Transport.RabbitMqSendTransport.SendPipe
1.Send (ModelContext modelContext) в GreenPipes.Agents.PentsContextSupervisor 1.GreenPipes.IPipeContextSource<TContext>.Send(IPipe
1 pipe.ТенгентПункты) труба, CancellationToken cancellationToken) в GreenPipes.Agents.PipeContextSupervisor 1.GreenPipes.IPipeContextSource<TContext>.Send(IPipe
1 труба, CancellationToken cancellationToken) в MassTransit.Scheduling.EndpointScheduleMessageProvider.ScheduleSend [T] (ScheduleMessage 1 message, IPipe
1 труба, CancellationToken) («CancellationToken») в MassTransit.Scheduling.BaseScheduleMessageProvider.MassTransit.Scheduling.IScheduleMessageProvider. ScheduleSend [T] (URI destinationAddress, DateTime scheduleTime, Task 1 message, IPipe
1 pipe, CancellationToken cancellationToken) в MassTransit.Pipeline.Filters.RedeliveryRetryFilter 2.Send(TContext context, IPipe
1 следующий) --- Конец внутренней трассировки стека исключений ---