MassTransit RMQ 调度计划但未发送
MassTransit RMQ scheduling scheduled but not sent
我正在尝试通过 masstransit/rabbitmq
实现调度机制。
我已经添加了文档中所述的配置:
Uri schedulerEndpoint = new (Constants.MassTransit.SchedulerEndpoint);
services.AddMassTransit(mtConfiguration =>
{
mtConfiguration.AddMessageScheduler(schedulerEndpoint);
mtConfiguration.AddSagaStateMachine<ArcStateMachine, ArcProcess>(typeof(ArcSagaDefinition))
.Endpoint(e => e.Name = massTransitConfiguration.SagaQueueName)
.MongoDbRepository(mongoDbConfiguration.ConnectionString, r =>
{
r.DatabaseName = mongoDbConfiguration.DbName;
r.CollectionName = mongoDbConfiguration.CollectionName;
});
mtConfiguration.UsingRabbitMq((context, cfg) =>
{
cfg.UseMessageScheduler(schedulerEndpoint);
cfg.Host(new Uri(rabbitMqConfiguration.Host), hst =>
{
hst.Username(rabbitMqConfiguration.Username);
hst.Password(rabbitMqConfiguration.Password);
});
cfg.ConfigureEndpoints(context);
});
});
然后我将使用 Bus
:
发送预定消息
DateTime messageScheduleTime = DateTime.UtcNow + TimeSpan.FromMinutes(1);
await _MessageScheduler.SchedulePublish<ScheduledMessage>(messageScheduleTime, new
{
ActivationId = context.Data.ActivationId
});
_MessageCheduler
是 IMessageScheduler
实例。
我确实看到调度程序队列接收到预定的消息,并且我在其中看到了正确的 scheduledTime
属性,但是只要它的计划应该触发,消息就不会到达状态机。好像我在配置中遗漏了一些东西或一些未启动的 MassTransit 服务。
请帮忙。
如果您实际阅读了 documentation,您会发现 UseDelayedMessageScheduler
是使用 RabbitMQ 进行调度的正确配置。并且 AddDelayedMessageScheduler
用于 container-based IMessageScheduler
注册。
我正在尝试通过 masstransit/rabbitmq
实现调度机制。
我已经添加了文档中所述的配置:
Uri schedulerEndpoint = new (Constants.MassTransit.SchedulerEndpoint);
services.AddMassTransit(mtConfiguration =>
{
mtConfiguration.AddMessageScheduler(schedulerEndpoint);
mtConfiguration.AddSagaStateMachine<ArcStateMachine, ArcProcess>(typeof(ArcSagaDefinition))
.Endpoint(e => e.Name = massTransitConfiguration.SagaQueueName)
.MongoDbRepository(mongoDbConfiguration.ConnectionString, r =>
{
r.DatabaseName = mongoDbConfiguration.DbName;
r.CollectionName = mongoDbConfiguration.CollectionName;
});
mtConfiguration.UsingRabbitMq((context, cfg) =>
{
cfg.UseMessageScheduler(schedulerEndpoint);
cfg.Host(new Uri(rabbitMqConfiguration.Host), hst =>
{
hst.Username(rabbitMqConfiguration.Username);
hst.Password(rabbitMqConfiguration.Password);
});
cfg.ConfigureEndpoints(context);
});
});
然后我将使用 Bus
:
DateTime messageScheduleTime = DateTime.UtcNow + TimeSpan.FromMinutes(1);
await _MessageScheduler.SchedulePublish<ScheduledMessage>(messageScheduleTime, new
{
ActivationId = context.Data.ActivationId
});
_MessageCheduler
是 IMessageScheduler
实例。
我确实看到调度程序队列接收到预定的消息,并且我在其中看到了正确的 scheduledTime
属性,但是只要它的计划应该触发,消息就不会到达状态机。好像我在配置中遗漏了一些东西或一些未启动的 MassTransit 服务。
请帮忙。
如果您实际阅读了 documentation,您会发现 UseDelayedMessageScheduler
是使用 RabbitMQ 进行调度的正确配置。并且 AddDelayedMessageScheduler
用于 container-based IMessageScheduler
注册。