内存中的 MassTransit 计划消息

In-memory MassTransit scheduled message

我使用 RabbitMQ 延迟消息插件来安排我的消息。没问题。

现在我想配置内存中的 MassTransit 以在开发环境中调度消息。

我的 asp.net 核心代码:

Uri schedulerEndpoint = new Uri("queue:scheduler");
    services.AddMassTransit(x =>
    {
        x.AddMessageScheduler(schedulerEndpoint);

        x.AddConsumer<ScheduleNotificationConsumer>();

        x.UsingInMemory((context, cfg) => 
        {
            cfg.UseMessageScheduler(schedulerEndpoint);

            cfg.ConfigureEndpoints(context);
        });
    });

好吧,这段代码不会在特定时间后调用我的消费者。

我读了 this link,我想我必须对内存中的计划消息使用 MassTransit.Quartz,因为,它说:UseInMemoryScheduler 方法初始化 Quartz.NET 用于独立的内存中操作。

是否正确? 如果是,但是这个 link 使用了以下代码,它依赖于 RabbitMq:

services.AddMassTransit(x =>
        {
            x.AddMessageScheduler(new Uri("queue:scheduler"));

            x.UsingRabbitMq((context, cfg) => 
            {
                cfg.UseInMemoryScheduler("scheduler");

                cfg.ConfigureEndpoints(context);
            });
        });

但我不想在开发环境中对 RabbitMq 有任何依赖。

如果您使用的是内存中传输,则可以使用 included in 7.1.8 的新延迟调度。这标准化了所有传输的配置,并首次提供了没有 Quartz.NET.

的内存调度

要配置新的延迟调度程序,请使用:

services.AddMassTransit(x =>
{
    x.AddDelayedMessageScheduler();

    x.UsingInMemory((context, cfg) => 
    {
        cfg.UseDelayedMessageScheduler();

        cfg.ConfigureEndpoints(context);
    });
});