Обработчик многократного выполнения проблемы - PullRequest
1 голос
/ 06 марта 2020

Возникли проблемы в обработчике Nservicebus. Обработчик выполняется несколько раз. пожалуйста, найдите код ниже. Столкнувшись с проблемой после выполнения этого кода, обработчик в классе letthandler выполняется несколько раз.

Класс обработчика букв

public Task Handle(Message message, IMessageHandlerContext context)
        {
            Log.Info($"Processing started");
            return Task.CompletedTask;
        }

Класс поведения

public override async Task Invoke(IIncomingLogicalMessageContext context, Func<Task> next)
        {
            //// custom logic before calling the next step in the pipeline.

            await next().ConfigureAwait(false);

            // custom logic after all inner steps in the pipeline completed.

            await context.Publish(context.Message.Instance, this.RetrieveOptions(context)).ConfigureAwait(false);
        }

        private PublishOptions RetrieveOptions(IIncomingLogicalMessageContext context)
        {
            var publishOptions = new PublishOptions();
            publishOptions.RequireImmediateDispatch();

            string requestPoolCounter;
            if (context.MessageHeaders.TryGetValue(Header.SentPoolCounter, out requestPoolCounter))
            {
                publishOptions.SetHeader(Header.SentPoolCounter, requestPoolCounter);
            }

            string primaryKey;
            if (context.MessageHeaders.TryGetValue(Header.PrimaryKey, out primaryKey))
            {
                publishOptions.SetHeader(Header.PrimaryKey, primaryKey);
            }

            string crmEntity;
            if (context.MessageHeaders.TryGetValue(Header.EntityType, out crmEntity))
            {
                publishOptions.SetHeader(Header.EntityType, crmEntity);
            }

            return publishOptions;
        }

Класс HandlersConnector

public override Task Invoke(IIncomingLogicalMessageContext context, Func<IInvokeHandlerContext, Task> stage)
        {
            context.MessageHandled = true;
            return Task.CompletedTask;
        }

Похоже, что после выполнения кода
await context.Publi sh (context.Message.Instance, this.RetrieveOptions (context)). ConfigureAwait (false); в классе Behavior выполняется обработчик lett, и l oop будет продолжаться. Не уверен, в чем проблема. Недавно ссылка на проект обновлена ​​с 4 до 7,2 Nservicebus. Есть предложения?

...