如何防止NServiceBus传奇多次启动?

时间:2011-06-21 20:02:09

标签: nservicebus saga

我想创建一个由消息“Event1”启动的传奇,但它将忽略具有相同应用ID的“重复”启动消息的接收(这可能是由于两个或更多用户在短时间内点击UI按钮时间)。文档似乎表明这种方法可行:

  • 佐贺宣布IAmStartedByMessages<Event1>
  • Saga使用ConfigureMapping<Event1>(s => s.SomeID, m => m.SomeID);
  • 配置自己
  • Handle(Event1 evt)在处理第一条消息时设置一个布尔标志,如果已经设置了标志,则不在处理程序之外。

这会有用吗?如果订阅者是多线程的,我会遇到竞争条件吗?如果是这样,我怎样才能达到预期的行为?

谢谢!

1 个答案:

答案 0 :(得分:5)

当同时处理两个Event1消息时发生竞争条件。防止创建两个saga实例的方法是在SomeID列上设置唯一约束。