在 NServiceBus 3.0.3 中,我写了一个传奇。根据我在 CQRS 范式中所看到的,当我们看到过去时,这应该与一个事件相吻合。我想确保我的传奇中没有业务逻辑。我在构建 saga 时的假设是,它将接收事件并根据传入的事件以及存储在 saga 中的某些数据元素发出命令。我遇到的问题是 Saga 默认情况下无法订阅已发布的事件。我已经尝试在 EndPointConfig 中设置 IWantToRunAtStartup 并在 Run 方法中执行
Bus.Subscribe<CustomerBilledEvent>();
我试过用 saga 在同一个程序集中创建一个处理程序,但仍然没有骰子。
我的 saga(由 Nservicebus.host.exe 托管)和发布者(控制台应用程序中的服务)的 app.config 都具有这样配置的消息端点
<add Messages="Events.CustomerBilledEvent, Events" Endpoint="orderservice"/>
Saga 上已配置 IHandleMessages,orderid 上已配置映射。
IHandleMessages<CustomerBilledEvent>
ConfigureMapping<CustomerBilledEvent>(s => s.OrderId, m=> m.OrderId);
我有点迷茫,为什么我不能让 Saga 订阅这个活动。我知道他们默认情况下不会自动订阅,但是当我查看 Udi 和 John 的博客下的示例时,我看到过去时(IEvent?)被发送到 saga 并且他们发出 Bus.Send,我推断它是命令(ICommand)。