Rabbitmq 如何在MassTransit上动态声明延迟通知的计划事件?
在示例ShoppingWeb的ShoppingCartStateMachine上,有这样一种配置来安排事件: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 =>
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: