状态机中路由单的发件箱?

Outbox for routing slip in statemachine?

在我的一个状态机操作中,我创建了一个路由单来执行一系列命令。这是通过调用

_busControl.Execute(routingSlip);

但有时由于并发问题,saga 提交会失败。是否有类似 "outbox" 的机制来延迟将路由单发送到总线,直到传奇成功提交?

是的,您可以使用发件箱延迟发送:

http://masstransit-project.com/MassTransit/usage/exceptions.html#outbox

cfg.ReceiveEndpoint("input-queue", e =>
{
    e.UseInMemoryOutbox();

    e.StateMachineSaga(...);
});

但是,您将需要在状态机事件处理程序中使用 ConsumeContext 来执行传送名单,而不是使用 _busControlIBusIBusControl 绝不应该在消费者内部使用。 documentation 有更多详细信息。