【发布时间】:2016-09-15 10:07:25
【问题描述】:
我正在尝试寻求有关在 NServiceBus 5.x 中设计由 2 条或更多消息启动的 Saga 的帮助。这意味着 saga 不会以单个消息开始,但所有消息都必须在 saga 开始之前存在。
我不太明白它是如何工作的,而且在任何地方都找不到示例或示例。
我读了几本书,其中清楚地说明了由几条消息开始一个传奇是完全可以的。
我不明白当你需要时如何找到这个传奇,例如3条消息开始传奇。在 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 到达时,saga 无法开始。 Message2 不见了。
然后另一个Message1 到达。
然后Message2 到达。 (完成第一个saga,可以开始了)
第二个Message1呢?
如何处理?
【问题讨论】:
-
据我所知,没有什么专门用来支持这一点的。当任何条消息到达时,你的传奇就必须开始。然后由您对到达的其他消息做出反应以建立您的“完整”数据集,确定消息是相关的,等等。
-
你使用的是哪种数据持久化?
-
@ColinPear Nhibernate
标签: c# .net nservicebus nservicebus5 nservicebus-sagas