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

jle*_*lew 4 nservicebus saga

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

  • 佐贺宣告 IAmStartedByMessages<Event1>
  • 佐贺用 ConfigureMapping<Event1>(s => s.SomeID, m => m.SomeID);
  • Handle(Event1 evt)在处理第一条消息时会设置一个布尔标志,如果已经设置了该标志,它将退出处理程序。

这样行吗?如果订户是多线程的,我会出现竞争状况吗?如果是这样,我如何实现所需的行为?

谢谢!

Udi*_*han 5

当同时处理两个Event1消息时,就会发生竞争状态。防止创建两个传奇实例的方法是通过在SomeID列上设置唯一约束。