MassTransit.PayloadNotFoundException

问题描述 投票:0回答:1

当我尝试使用消息时,我在rabbitmq管理中收到此错误:

MT-Fault-ExceptionType: MassTransit.PayloadNotFoundException
MT-Fault-Message:   The payload was not found: MassTransit.MessageSchedulerContext
MT-Fault-StackTrace:    at MassTransit.PipeExtensions.GetPayload[TPayload](PipeContext context) in /_/src/MassTransit.Abstractions/Middleware/PipeExtensions.cs:line 55
at MassTransit.Context.ScheduleMessageRedeliveryContext`1.ScheduleRedelivery(TimeSpan delay, Action`2 callback) in /_/src/MassTransit/Contexts/Context/ScheduleMessageRedeliveryContext.cs:line 28
at MassTransit.Middleware.RedeliveryRetryFilter`2.Send(TContext context, IPipe`1 next) in /_/src/MassTransit/Middleware/RedeliveryRetryFilter.cs:line 101

这是配置:

private static void AddMessagingConfiguration(IServiceCollection services, WebApplicationBuilder builder)
    {
        services.AddMassTransit(busConfigurator =>
        {
            busConfigurator.AddConsumer<GtsDocumentConsumer>();
            busConfigurator.AddEntityFrameworkOutbox<CompanyGoodsDbContext>(outboxConfigurator =>
            {
                outboxConfigurator.UseSqlServer();
                outboxConfigurator.UseBusOutbox();
                outboxConfigurator.QueryMessageLimit = 10;
                outboxConfigurator.QueryDelay = TimeSpan.FromSeconds(1);
                outboxConfigurator.QueryTimeout = TimeSpan.FromSeconds(30);
            });

            busConfigurator.AddOptions<MassTransitHostOptions>()
                .Configure(options =>
                {
                    options.WaitUntilStarted = true;
                    //options.StartTimeout = TimeSpan.FromSeconds(1);
                    //options.StopTimeout = TimeSpan.FromSeconds(30);
                });
            

            busConfigurator.UsingRabbitMq((busContext, transportConfigurator) =>
            {
                transportConfigurator.Host(builder.Configuration["EventBusSettings:HostAddress"], "/", hostConfiguration =>
                {
                    hostConfiguration.Username(builder.Configuration["EventBusSettings:Username"]);
                    hostConfiguration.Password(builder.Configuration["EventBusSettings:Password"]);
                });

                transportConfigurator.AutoStart = true;
                transportConfigurator.UseMessageRetry(r => r.Immediate(5));
                transportConfigurator.UseScheduledRedelivery(r =>
                    r.Intervals(TimeSpan.FromSeconds(5), TimeSpan.FromMinutes(15), TimeSpan.FromMinutes(30)));
                transportConfigurator.ConfigureEndpoints(busContext);
            });
        });
    }

当我们在两个应用程序之间的 docker 中本地测试所有内容时,此配置工作正常,但现在当两个应用程序在服务器上运行时,我收到此错误

.net-core rabbitmq masstransit
1个回答
0
投票

UseScheduledRedelivery
->
UseDelayedRedelivery

需要 RabbitMQ 上的

delayed-exchnage
插件。

此外,顺序很重要,根据文档

UseDelayedRedelivery
然后
UseMessageRetry

© www.soinside.com 2019 - 2024. All rights reserved.