使用 MassTransit 组合 UseRetry() 和 UseScheduledRedelivery()

Combine UseRetry() and UseScheduledRedelivery() using MassTransit

是否可以在消费者端将这两种方法结合起来,如果消息消费过程中出现异常,首先发生的是重试,当重试策略用完时,消息将使用 InMemoryScheduler 通过石英重新传送?组合这些方法时我得到的行为是每次重新交付我都会重试,但这不是我需要的......我想知道是否有可能先重试,然后才重新交付但没有额外的重试吗?

文档中有一个部分准确解释了如何执行您想要的操作here

简而言之,您需要配置消息调度程序,然后按照如下所示的顺序添加过滤器,以便它按预期工作:

cfg.UseMessageScheduler(new Uri("rabbitmq://localhost/quartz"));

cfg.ReceiveEndpoint(host, "submit-order", e =>
{
    e.UseScheduledRedelivery(r => r.Intervals(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(15), TimeSpan.FromMinutes(30)));
    e.UseMessageRetry(r => r.Immediate(5));
    e.Consumer(() => new SubmitOrderConsumer(sessionFactory));
});

此示例将提供初始立即重试(您可以对任一过滤器使用任何重试策略)并在立即重试用完后使用重新传送。