MassTransit传奇通过NHibernateSagaRepository(星巴克的例子)节省了后期费用

MassTransit传奇通过NHibernateSagaRepository(星巴克的例子)节省了后期费用,nhibernate,masstransit,Nhibernate,Masstransit,我已将星巴克的示例转换为使用RabbitMQ和NHibernate。。但是,DrinkPreparementSaga以及它实际保存到数据库的时间与PaymentCompleteMessage提交的时间之间存在一个bug/挑战/问题 代码的工作原理(开箱即用,这不是我更改的任何内容)。。。在初始状态完成并转换到下一个状态之前,saga的新实例不会保存到数据库中 问题在于,在示例星巴克应用程序中,DrinkPreparement的故事从一个非常缓慢的方法开始,该方法每秒打印一次咖啡制作声音10次 因

我已将星巴克的示例转换为使用RabbitMQ和NHibernate。。但是,DrinkPreparementSaga以及它实际保存到数据库的时间与PaymentCompleteMessage提交的时间之间存在一个bug/挑战/问题

代码的工作原理(开箱即用,这不是我更改的任何内容)。。。在初始状态完成并转换到下一个状态之前,saga的新实例不会保存到数据库中

问题在于,在示例星巴克应用程序中,DrinkPreparement的故事从一个非常缓慢的方法开始,该方法每秒打印一次咖啡制作声音10次

因此,从实际创建传奇到将其保存到数据库之间有10秒钟的时间。。更大的问题是,由于saga不存在,任何其他指向该saga实例的消息(通过CorrolationId)都会被抛出错误队列

NHibernateSagaRepository是否应该立即保存新的Saga实例,然后运行工作流,然后更新Saga post工作流?我似乎想不出另一种方法来让这个例子起作用,但这需要对NHibernateSagaRepository进行适当的重组


提前感谢。

在处理消息之前未保存saga的原因是saga的某些成员可能不可为null(或允许为null),并且在处理初始saga消息之前未设置它们

你是对的。看一看Riktig示例()以了解如何使用自动传奇,以及如何使用另一个服务(在本例中为图像检索服务)的相关性。Sagas不应该实际执行工作,而是协调事务的状态。早些时候的星巴克例子是我们一天早上在奥斯汀建立的一个幼稚的实现。它早就应该更新了(因为更多的原因,包括它仍然使用Magnum状态机,这很快就被弃用,取而代之的是自动化)