4

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

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

这行得通吗?如果订阅者是多线程的,我会有竞争条件吗?如果是这样,我怎样才能实现所需的行为?

谢谢!

4

1 回答 1

5

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

于 2011-06-22T09:49:53.693 回答