问题标签 [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.

0 投票
1 回答
3183 浏览

.net - 在 .net 中具有持久存储的 Saga 实现。Masstransit Saga 的替代品?

我一直在使用带有 MassTransit 的自动状态机。我喜欢使用那个状态/传奇机器,尤其是它是如何配置和设置的,以及我可以为状态机提供实现合约以用作消息的事件。

这就是它的样子:

有哪些类似但未连接到 MQ 架构的替代 Saga 实现?我想我真正在寻找的是至少具有内存持久存储的状态机或 Saga 实现。

0 投票
1 回答
272 浏览

activemq - 类似于 MassTransit Saga 的 ActiveMQ 功能

ActiveMQ 中是否有任何替代 MassTransit Saga 功能的方法?作为一名学生,我学过MassTransit,现在想通过类比学习ActiveMQ..

0 投票
2 回答
873 浏览

c# - ReBus 相当于 NServiceBus Saga ReplyToOriginator

我正在与 ReBus 中的 Sagas 合作,根据我使用 NServiceBus 的经验,您可以回复 Saga 的原始创建者以提供更新,如下所示:

我没有看到使用 ReBus 的等效方法。有没有办法做到这一点,如果没有什么是好的模式(除了发起者轮询),我可以使用它来实现同样的目标?一个例子是尝试创建一个客户,而客户想知道它是什么时候创建的,然后再尝试更改它的地址。

这是我快速整理的客户场景的一个简单示例:

0 投票
3 回答
770 浏览

domain-driven-design - 聚合根:状态更改或因异常而失败或...?

聚合根是用来控制状态变化的——当前允许什么,不允许什么。如果允许状态转换,请继续。如果不是,你抛出一个异常,解释为什么不允许它。

但是如果状态改变因为已经处于请求状态而没有发生呢?

例如,如果您Approve的聚合根上有一个方法,并且当它被调用时,状态已经被批准?

  • 是否应该抛出“ XYZ 已获批准”的异常
  • 还是应该默默地忽略它?
  • 还是应该再次“发出信号”状态更改(事件溯源,下一段)?

在我的情况下,我使用事件源,因此如果发生状态更改,则会发出一个事件。在我的事件流中包含没有真正状态更改的事件对我来说并不“干净”,因为我想确信这些事件实际上是由于状态更改操作而产生的。

有经验法则吗?

编辑:
在所描述的情况下,批准一个被批准的元素并不会真正受到伤害。所以倾向于这种方式(谢谢@Eben Roux,@guillaume31)。

但是让我们为它添加更多的香料(问题背后的实际问题):

认为:

  • 消息总线
  • 异步命令/事件处理
  • 流程管理器

如果进程管理器(又名 saga)发出命令(异步)并想知道命令是否成功怎么办?我认为如果流程管理器不必关心这个实现细节,它会减少精神负担/错误源

我看到了 3 种处理方法:

  • 在总线上发送“带有 id ABC 的命令成功/失败”消息
    进程管理器等待消息而不是事件
  • 如果进程管理器没有遇到异常,则使命令执行同步
    ,一切都很好,继续
  • 另外引入一个新事件ApprovalDeclined { WasAlreadyApproved = true }
    ,流程管理器等待这个事件 - 偏角是总历史的一部分,也许是一个优势,也许永远不需要......

我知道:“这取决于”
但是您能想到任何其他(更优雅/更容易/不同)的解决方案吗?您最喜欢的处理此问题的“流程管理器兼容”方式是什么?

0 投票
1 回答
1523 浏览

saga - 如何确保我的 Axon Saga 收到与 AssociationProperty 匹配的事件的通知?

我有一个正在使用 Axon 开发的项目,但我的 Saga 没有正确执行。

My Saga 包含与此类似的行:

第一个事件正在触发一个开始 saga,并且还触发了 initialiseWorkflow 任务(它正确地创建了一组额外的步骤。)但是,当 SecondEvent 到达时(与 FirstEvent 具有相同的 UUID 关联属性值),saga 不会拿起那第二个事件。

我已经尝试专门包括以下行来增强关联,但这也不起作用:

具有讽刺意味的是,我有一个测试用例,使用正常工作的轴突测试框架,这类似于:

问题出现在我的端到端测试中,我将命令直接放入 CommandGateway,并直接在存储库中检查结果。

我已经仔细检查了 AnnotatedSagaManager 是否正在使用,并且确实如此。

有没有人对可能出现的问题有任何想法,或者我误解了 Sagas 应该如何工作?

编辑:还有一些更新:

1) 我注意到在直接关联 UUID 时需要使用 toString(),所以我尝试将值变成事件的字符串 - 没有进展。

2)我尝试打印出关联的值,发现不需要直接关联行(在start saga过程中关联了uuid)

3)我尝试将@StartSaga 放在 secondEvent 上,这达到了“Processing SecondEvent ...”的代码,但在一个新的传奇中。

更多了解,但还没有解决方案!

0 投票
1 回答
296 浏览

nservicebus - NServicebus 传奇性能

我在 NSB 传奇性能方面遇到了麻烦。我们有一个单一的传奇来编排长时间运行的会话。Saga 向不同的处理器发送大量消息,然后得到它的回复。我看到 sagas 队列包含大量传入消息。每条消息的处理速度非常快,但在处理下一条消息之间存在延迟。这是日志文件的一部分:

我们看到了 4 秒的延迟。那很慢。请帮忙,我的传奇有什么问题?

谢谢!

0 投票
2 回答
76 浏览

nservicebus - NServiceBus:如何归档已完成或终止的 sagas

this.MarkAsComplete();当从 Saga 本身调用NServiceBus 时,至少在 RavenDB 持久存储中删除 Saga 数据。

当 Saga 完成或终止时,是否有内置方法来存档 Saga 数据?出于可追溯性的原因,我们需要这样的功能。

0 投票
1 回答
1013 浏览

c# - NServiceBus Saga 多次处理消息类型给出并发异常

我们有一个处理多种消息类型的 NServiceBus 实现:

MessageData 是这样的:

CreateMessage 有一个 MessagePart,它在其处理程序中添加到 MessageParts。ConfirmMessage 更新特定 MessagePart 的状态。

这是场景:

1) 接收到第一个 CreateMessage。这将在 Raven 中创建 Saga,并将 MessagePart(状态为“1”)添加到 MessageParts。

2) 接收到第一个 ConfirmMessage。这会将 Saga 中第一个添加的 MessagePart 的状态更新为“1 2”。转到 RavenDB 中的文档时,可以在浏览器中看到这一点。

3) 接收到第二个 CreateMessage。这会向 MessageParts 添加第二个 MessagePart。查看数据时,第一个 MessagePart 的状态仍然是“1”而不是“1 2”,这会引发并发异常(ActualETag 不等于 ExpectedETag):

看起来 Saga 数据是按消息类型缓存的。是这样吗?有解决办法吗?

笔记:

我们正在使用多个 IAmStartedByMessages,但是当 ConfirmMessage 在 CreateMessage 之前时,此消息将被添加到队列中,直到 CreateMessage 被处理。

0 投票
1 回答
463 浏览

linux - 如何使用 RSAGA 解决“错误:工具”?

我在 Ubuntu 14 64 位版本上使用 R 3.1.1。我安装了 SAGA GIS 2.1.2 和 RSAGA 0.93-6。

到目前为止,一切似乎都很好。

rsaga.env() 有效,我使用:

因为在 64 位上,模块位于其他地方。获取库也可以:

但是当我尝试获取模块或其他任何东西时,它会给出一个奇怪的错误:

我发现 rsaga 正式不支持更高版本的 SAGA GIS 2.1.0 但是当我尝试 2.1.0 时,我得到另一个问题中描述的错误:https ://gis.stackexchange.com/questions/109497/rsaga- saga-cmd-2-1-0-error-inconsistency

我应该如何解决这个错误?

0 投票
1 回答
449 浏览

rebus - saga 中请求/回复的自相关

我想问一下,当我为 Request/Reply 做 saga 时,我是否理解正确,感谢这个https://github.com/rebus-org/Rebus/issues/105我可以ConfigureHowToFindSaga留空?

如果是真的,最好在 Wiki 页面中提及它,以及在适配器中注册 saga 的需要 :)

下面的代码似乎可以工作,请您看看是否可以?