我有一个控制台应用程序,用于将石英调度与主传输相结合。相关代码在IHostedService的Task StartAsync(CancellationToken cancellationToken)
实现中。
看起来像下面的代码
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
可能是有意义的(因为它们不像定期安排的消息那样是一次性安排的消息)。
然而,目前的行为是预期的。