如何防止NServiceBus传奇事件被多次启动



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

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

这行得通吗?如果订阅服务器是多线程的,我会有竞争条件吗?如果是,我该如何实现期望的行为?

谢谢!

当同时处理两条Event1消息时,会出现竞争条件。防止创建两个传奇实例的方法是在SomeID列上设置唯一约束。

最新更新