MassTransit IBusControl.ScheduleRecurringSend 为相同类型的预定事件生成相同的 MessageId
MassTransit IBusControl.ScheduleRecurringSend generates the same MessageId for the same type of scheduled events
我有一个控制台应用程序,目的是将石英调度与公共交通结合使用。相关代码位于 Task StartAsync(CancellationToken cancellationToken)
IHostedService 的实现中。
看起来像下面的代码
await _bus.ScheduleRecurringSend(new Uri($"queue_uri"),
new CustomMessageSchedule(),
new CustomMessage(),
cancellationToken: cancellationToken);
var scheduler = await _schedulerFactory.GetScheduler(cancellationToken);
scheduler.JobFactory = new MassTransitJobFactory(_bus, _jobFactory);
await scheduler.Start(cancellationToken);
计划的消息已成功发布到队列,但它们获得相同的 messageId。这会在消费者方面造成一些问题。
我必须使用 IFilter<SendContext<CustomMessage>>
实现,但没有成功。也许我没有正确使用它,但我什至不确定这是否是正确的方法。
有什么建议吗?
计划的消息在发送之前不会被 Quartz 修改,除了包括一些额外的消息头。为重复消息生成新的 MessageId
可能有意义(因为它们不像定期消息那样是一次性消息)。
但是,截至目前,行为符合预期。
我有一个控制台应用程序,目的是将石英调度与公共交通结合使用。相关代码位于 Task StartAsync(CancellationToken cancellationToken)
IHostedService 的实现中。
看起来像下面的代码
await _bus.ScheduleRecurringSend(new Uri($"queue_uri"),
new CustomMessageSchedule(),
new CustomMessage(),
cancellationToken: cancellationToken);
var scheduler = await _schedulerFactory.GetScheduler(cancellationToken);
scheduler.JobFactory = new MassTransitJobFactory(_bus, _jobFactory);
await scheduler.Start(cancellationToken);
计划的消息已成功发布到队列,但它们获得相同的 messageId。这会在消费者方面造成一些问题。
我必须使用 IFilter<SendContext<CustomMessage>>
实现,但没有成功。也许我没有正确使用它,但我什至不确定这是否是正确的方法。
有什么建议吗?
计划的消息在发送之前不会被 Quartz 修改,除了包括一些额外的消息头。为重复消息生成新的 MessageId
可能有意义(因为它们不像定期消息那样是一次性消息)。
但是,截至目前,行为符合预期。