首页 > 解决方案 > 状态机中路由单的发件箱?

问题描述

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

_busControl.Execute(routingSlip);

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

标签: masstransitrouting-slip

解决方案


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

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

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

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

但是,您将需要使用ConsumeContext状态机事件处理程序中的 而不是使用_busControl. IBus或者IBusControl永远不应该在消费者内部使用。该文档有更多详细信息。


推荐阅读