在我的一个状态机操作中,我创建了一个路由单以执行一系列命令。这是通过调用
_busControl.Execute(routingSlip);
但有时由于并发问题,saga 提交失败。是否有类似“发件箱”的机制来推迟将路由单发送到总线,直到成功提交传奇?
在我的一个状态机操作中,我创建了一个路由单以执行一系列命令。这是通过调用
_busControl.Execute(routingSlip);
但有时由于并发问题,saga 提交失败。是否有类似“发件箱”的机制来推迟将路由单发送到总线,直到成功提交传奇?
是的,您可以使用发件箱来推迟发送:
http://masstransit-project.com/MassTransit/usage/exceptions.html#outbox
cfg.ReceiveEndpoint("input-queue", e =>
{
e.UseInMemoryOutbox();
e.StateMachineSaga(...);
});
但是,您将需要使用ConsumeContext
状态机事件处理程序中的 而不是使用_busControl
. IBus
或者IBusControl
永远不应该在消费者内部使用。该文档有更多详细信息。