问题描述
我使用 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);
});
});