内存中的大众运输计划消息

问题描述

我使用 RabbitMQ Delayed Message Plugin 来安排我的消息。它工作没有问题。

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

我在asp.net core中的代码

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 以进行独立的内存中操作。

正确吗? 如果是,但此链接使用了以下代码,该代码依赖于 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);
    });
});