我正在尝试寻找有关在 NServiceBus 5.x 中设计由 2 条或更多消息启动的 Saga 的帮助。这意味着 saga 不会以单个消息开始,但所有消息都必须在 saga 开始之前存在。
我不太明白它是如何工作的,并且在任何地方都找不到示例或示例。
我读了几本书,其中清楚地表明由几条消息开始一个传奇是完全可以的。
我不明白的是,当您需要例如 3 条消息来启动 saga 时如何找到 saga。在 saga 可以“开始”之前,所有 3 条消息必须以任何顺序到达。这对我对[Unique]
属性的选择有何影响?
示例:我需要由三个 ID“StoreID”、“ComputerID”、“UserID”“唯一”标识的 saga。这三个 ID 将到达三个不同的命令,Message1
, Message2
, Message3
。
public class MySaga : Saga<MySagaData>,
IAmStartedByMessages<Message1>,
IAmStartedByMessages<Message2>,
IAmStartedByMessages<Message3>
{ ...
}
MySagaData 是否应该在三个属性上具有 [Unique] 属性?
public class MySagaData
{
[Unique]
public int StoreId {get;set;}
[Unique]
public int ComputerId {get;set;}
[Unique]
public int UserId {get;set;}
}
还是我必须创建连接这三个的只读属性?
当Message1
和Message3
到达时,传奇无法开始。Message2
不见了。
然后另一个Message1
来了。
然后Message2
到达。(完成第一个saga,所以可以开始了)
第二个Message1
呢?
这将如何处理?