Rabbitmq 如何在MassTransit上动态声明延迟通知的计划事件?

Rabbitmq 如何在MassTransit上动态声明延迟通知的计划事件?,rabbitmq,masstransit,Rabbitmq,Masstransit,在示例ShoppingWeb的ShoppingCartStateMachine上,有这样一种配置来安排事件: Schedule(() => CartExpired, x => x.ExpirationId, x => { x.Delay = TimeSpan.FromSeconds(10); x.Received = e => e.CorrelateById(context =>

在示例ShoppingWeb的ShoppingCartStateMachine上,有这样一种配置来安排事件:

 Schedule(() => CartExpired, x => x.ExpirationId, x =>
            {
                x.Delay = TimeSpan.FromSeconds(10);
                x.Received = e => e.CorrelateById(context => context.Message.CartId);
            });
请注意,“x.Delay”属性,这是在构造函数上设置的,但在我的情况下,我想以友好的方式通知时间延迟

When(ApproveOrder)
                .Then(context =>
                {
                    context.Instance.EstimatedTime = context.Data.EstimatedTime;
                    context.Instance.Status = context.Data.Status;
                })
…并设置带有“context.Data.EstimatedTime”延迟的计划事件,例如


有一种方法可以通过在状态机构造函数类上使用“Schedule”声明来实现这一点。

在状态机中使用的
Schedule
扩展得到了增强,增加了对动态延迟的支持。例如,您可以执行以下操作:

When(ApproveOrder)
    .Then(context => context.Instance.EstimatedTime = context.Data.EstimatedTime)
    .Schedule(CartExpired, context => context.Instance.EstimatedTime)

这将使用第二个参数的延迟,而不是创建计划时指定的延迟。

我知道这是旧的,但在使用示例时,我注意到这似乎不起作用。我还没有找到任何方法来通过这个延迟。如果你使用的是现代版的MassTransit,它仍然在那里。您可以在这里看到一个工作示例:啊,所以最后一个参数不是设置消息过期,而是设置延迟!我将在上面的评论中为断开的链接提供一个tryUpdate: