问题标签 [saga]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Saga 完成导致分布式事务完成错误
处理顺序:
- Saga 消息处理程序接收包含数据项的第一条消息。
- 消息处理程序使用具有自己的数据库事务的业务对象。
- 如果项目更新正常,则数据库事务提交并且 saga 完成。
- Saga 消息处理程序接收包含数据项的第二条消息。
- 消息处理程序在尝试打开新的数据库事务时抛出异常,如上所述。
错误信息:
堆栈跟踪:
有很多代码涵盖了上述流程,但我很高兴发布有用的内容。
instance - Nservicebus SagaData 实例?
我正在使用 Nservicebus sagadata 向 MSMQ 添加消息,我是新手。我有一种情况,我必须检查是否有任何带有 saga 数据的活动 Saga。如果有,那么我将读取存储在 SagaData 中的对象 ID。那么有没有办法读取或检查我是否创建了 SagaData?StuctureMap.ObjectFactory.Container 有帮助吗?
提前感谢哈里斯
handler - 如何为 NServiceBus Saga 中的错误队列编写处理程序?
我有一种情况,我的 MSMQ 中的 Maxtries 为 5。5 次后,nservicebus 将消息发送到我定义的错误队列。现在我想在发生这种情况时执行一些进一步的操作(我必须将某些进程的状态更新为错误)是否可以在我的 Saga 类中编写一个处理程序来读取这些错误队列?
提前致谢 哈里斯
events - Nservicebus Sagas 和订阅事件
在 NServiceBus 3.0.3 中,我写了一个传奇。根据我在 CQRS 范式中所看到的,当我们看到过去时,这应该与一个事件相吻合。我想确保我的传奇中没有业务逻辑。我在构建 saga 时的假设是,它将接收事件并根据传入的事件以及存储在 saga 中的某些数据元素发出命令。我遇到的问题是 Saga 默认情况下无法订阅已发布的事件。我已经尝试在 EndPointConfig 中设置 IWantToRunAtStartup 并在 Run 方法中执行
我试过用 saga 在同一个程序集中创建一个处理程序,但仍然没有骰子。
我的 saga(由 Nservicebus.host.exe 托管)和发布者(控制台应用程序中的服务)的 app.config 都具有这样配置的消息端点
Saga 上已配置 IHandleMessages,orderid 上已配置映射。
我有点迷茫,为什么我不能让 Saga 订阅这个活动。我知道他们默认情况下不会自动订阅,但是当我查看 Udi 和 John 的博客下的示例时,我看到过去时(IEvent?)被发送到 saga 并且他们发出 Bus.Send,我推断它是命令(ICommand)。
nhibernate - 如何映射一个字典使用 Fluent NHibernate 的类映射,并测试该映射?
我的 MassTransit 传奇只有一个字段无法正确映射。这是 -
我试过用几种方法映射它 -
我写了一个单元测试来测试映射 -
我不确定问题到底出在哪里,在映射中还是在测试中。单元测试中的实际错误是 -
有人可以解释如何使用 ClassMap 映射 IDictionary 并使用 PersistenceSpecification ... VerifyMappings() 测试该映射吗?
PS - FluentNHibernate 的版本是 1.3.0.717,NHibernate 的版本是 3.2.0.4000。我确实必须在本地编译它以进行一项次要且不相关的更改。
谢谢!
这是我现在得到的其余错误 -
nhibernate - 如何使用将项目添加到 NHibernate 持久 IList 的 MassTransit Saga 确保良好的性能
我有一个有 3 个状态的传奇 -
当它收到 BofMessage(其中 Bof = 文件开头)时,它从 Initial 转换为 ReceivingRows。在 BofMessage 之后,它会接收大量 RowMessage,其中每个都描述平面文件中的一行。发送完所有 RowMessage 后,将发送 EofMessage 并且状态更改为 Completed。观察 -
这有效,只是它具有 n 平方性能。使用 NProf 进行调查显示,每行添加都会导致整个行列表为:
a) 从数据库中选择
B) 从数据库中删除
C) 重新插入数据库。
这对我来说似乎是非常糟糕的行为。添加一行所需要做的就是……好吧,向数据库中添加一行!添加操作实际上是我对行列表所做的唯一事情。当我们在列表中有 10,000 个项目时,这不会扩展。
有谁知道如何让这个传奇更加理智的表现行为?
顺便说一句-如果需要,这是 IList 的映射方式-
谢谢!
cqrs - Saga , 命令, 事件 & ReadModel
我目前正在编写我的第一个 saga,我对读取模型有点困惑。让我们用一个例子来解释它:
我有三个有界上下文:编程、承包商和控制。它们中的每一个都有其特定的读取模型。
工作流程:
- 编程发送事件“ JobScheduled ”
- Saga收到此事件并告诉承包商“安排工作”。
- 完成后,承包商发送事件“ JobDone ”。
- Saga接收到这个事件并告诉控制“开始控制周期”。
事实证明这里一切都很好。我们处于写入端,因此我们正在传递重要信息以使流程继续进行。
我的问题带有不必要的信息。假设事件“ JobScheduled ”有一个备注字段:“测试备注”,在此作业完成之前,该字段更改为“测试备注重要”。这种变化对所描述的工作流并不重要,但重要的是,承包商在查看承包商有界上下文的读取模型时可能会看到现场的变化。
我是给传奇事件NoteChanged并对其进行处理,还是应该创建一个在我的承包商有界上下文中直接监听此事件的投影?
将它交给saga在我看来像是不必要的工作,因为我只是在这里更新 readmodel,没有涉及更改的域。
另一方面,在两个有界上下文之间进行直接耦合会删除 sagas 的一个资产,即修改有界上下文在工作流中彼此之间的交互的可能性。
感谢您的阅读,
workflow - 工作流程和 sagas 之间的区别
工作流和 sagas 之间到底有什么区别?各自的优缺点是什么?
谢谢!
nservicebus - 单个消息的多个 saga 映射
我需要将一条消息映射到多个 saga 实例。我该怎么做?
我想到了一个实用服务,它接收该消息并将其副本发送到所有 saga 实例。但是这个解决方案需要所有 sagaIds 的这项服务的知识。
javascript - 如何从 gradle 调用任意方法?
试图从 Gradle 调用 Saga Javascript 代码覆盖率。在玩了很久之后,我终于可以让它工作了。但是,我是 gradle 新手,不知道我的做法是否最有意义!似乎有很多方法可以做到这一点,所以我想我会在这里发布我所做的事情,希望我可以了解这种方式是否可行或是否有更好的方法。
从 maven Central 下载 saga-core 后,发现没有 Java“main”。所以我认为我不能轻易使用 JavaExec。在我看来,我需要创建一个 Java 对象、设置一些参数并调用提供的“运行”方法。
这是我最终得到的最终 build.gradle: