问题标签 [nservicebus-sagas]

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 回答
547 浏览

nservicebus - NServiceBus Timeoutsdispatcher 队列在压力测试期间被消息淹没

我正在对使用 2 个超时的传奇进行一些压力测试。在测试期间,大约创建了 21K saga。所以这意味着 42K 超时,但我注意到传奇的 timeoutsdispatcher 队列被成千上万的消息淹没,直到它崩溃,因为达到了 MSMQ 存储限制。

自从我将持久性机制从 RavenDB 切换到 SQL Server 后,我就看到了这种行为。

有谁知道可能出了什么问题?

传输:MSMQ
持久性:NHibernate 使用的包:

测试设置:
* 端点 1 正在向端点 2 发送 22000 条消息。
* 端点 2 托管由该消息启动的 saga。
* 每个 saga 发布一个事件,然后请求 2 次超时:1 次在 4 分钟,1 次在 10 分钟。

观察到的行为:
* 端点 1 在一分钟内发送了 22K 条消息。
* 端点 2(传奇)每秒处理 5 到 10 条消息。
* 4 分钟后第一次超时被触发,而端点 2 仍在处理来自其队列的消息,因此仍在创建新的 saga 实例。
* 从那一刻起,saga 端点的 timeoutsdispatcher 队列被消息填满。
* 大约 10 分钟后,timeoutsdispatcher 队列已经包含超过 170K 的消息并且仍在填满。
* 这种情况一直持续到端点 2 崩溃,因为达到了 MSMQ 存储限制,或者输入队列中的所有消息都已处理。如果后者先发生,则 timeoutsdispatcher 队列消息计数开始减少,直到最终达到 0。

0 投票
1 回答
132 浏览

nservicebus - 当 saga 使用与历史完成的 saga 相同的键启动时,Azure 上的 SecondaryIndexPersister 会引发异常

我们将 Sagas 与 Azure 持久性结合使用。

我们有一个可以与用户会话处理程序进行比较的传奇。该会话的唯一键是用户的手机号码。第一次收到短信时,会为该手机号码创建一个传奇。saga 数据记录和二级索引在 Azure 表存储中创建。

过了一会儿,saga 被标记为已完成。saga 数据条目被删除,但二级索引仍保留在表存储中。

又过了一会儿,收到了来自同一个手机号码的新消息。该手机号码没有活动的 saga,因此创建了一个新实例(但与历史完成的 saga 具有相同的 sagaId 可能是因为二级索引仍然存在)。由于以下异常,未处理启动 saga 的消息:

当然,我可以通过保持 saga “运行”并在 saga 数据中设置一个内部标志来解决这个问题,无论会话是否处于活动状态。但是,我想知道为什么在 Saga 完成时没有删除二级索引?有什么我忘记了吗?使用相同的唯一键启动 saga 的新实例是一个糟糕的设计吗?

提前感谢您的回答/评论。

环境:

  • NServiceBus 5.2.4
  • NServiceBus.Azure 6.2.4
0 投票
2 回答
175 浏览

nservicebus - NserviceBus Sagas 实用程序

我读了这个关于 NserviceBus Sagas 的优秀教程(http://blogs.planbsoftware.co.nz/?p=247),但我仍然不明白这个模型(sagas)的优势是什么,而不是使用数据库或业务层交易?

0 投票
1 回答
71 浏览

nservicebus - 每个进程的最大 IEndpointInstances

IEndpointInstances单个进程中托管的唯一身份数量是否有上限?

我正在考虑一种设计,该设计将看到多达 100 个独特的IEndpointInstances,都在单独的队列上侦听,同时处于活动状态。

这会对 NServiceBus 造成问题吗? 进程是否会死锁或启动太多线程以致无响应且无用?

问题NServiceBus - 如何为每个接收者订阅的消息类型获取单独的队列?似乎表明您不能在一个进程中拥有多个端点,但这是一篇较旧的帖子。我已经针对 NServiceBus 6-- beta4 构建了一个小样本,它确实有效。

有一个类似的问题NServiceBus Single Process, 但是基于 OP 的上下文使用Satellite Features结束的 Multiple Input queues是推荐的方法。 但是,就我而言,我有 100 个(功能不同)saga(每个队列 1 个),每个 saga 可能需要接收类似的消息,但我需要确保只有正确的 saga 才能接收消息。因此,我认为实现自定义功能不会满足我的要求。 或者 Satellite Features 会支持 Sagas 吗?

0 投票
2 回答
43 浏览

ravendb - 用于持久主机 saga 的自定义数据库名称

是否可以使用自定义数据库名称(不是端点)来使用 ravenDb 持久化 nservicebus 主机传奇?

我使用 NServiceBus 3.3 和 RavenDB 2.5。并以这种方式初始化端点:

我的 App.config 包含:

0 投票
3 回答
441 浏览

c# - 如何设计一个从接收多条消息开始的 NServiceBus Saga

我正在尝试寻找有关在 NServiceBus 5.x 中设计由 2 条或更多消息启动的 Saga 的帮助。这意味着 saga 不会以单个消息开始,但所有消息都必须在 saga 开始之前存在。

我不太明白它是如何工作的,并且在任何地方都找不到示例或示例。

我读了几本书,其中清楚地表明由几条消息开始一个传奇是完全可以的。

我不明白的是,当您需要例如 3 条消息来启动 saga 时如何找到 saga。在 saga 可以“开始”之前,所有 3 条消息必须以任何顺序到达。这对我对[Unique]属性的选择有何影响?

示例:我需要由三个 ID“StoreID”、“ComputerID”、“UserID”“唯一”标识的 saga。这三个 ID 将到达三个不同的命令,Message1, Message2, Message3

MySagaData 是否应该在三个属性上具有 [Unique] 属性?

还是我必须创建连接这三个的只读属性?

Message1Message3到达时,传奇无法开始。Message2不见了。

然后另一个Message1来了。

然后Message2到达。(完成第一个saga,所以可以开始了)

第二个Message1呢?

这将如何处理?

0 投票
1 回答
602 浏览

c# - 如何正确关联启动另一个控制器传奇的多个实例的控制器传奇?

我有一个控制器传奇,它曾经有一个步骤来启动在一个事务中包含 3 个操作的过程。我现在正在将这个子流程重构为一个单独的 saga。这样做的结果将是原始 saga 将启动新“子 saga”的多个实例(此子 saga 也将由其他非 saga 进程通过相同的命令启动)。我的问题是如何以最好的方式关联这个传奇的层次结构?

在以下示例中,主 saga 将尝试启动具有相同相关 ID 的子 saga 的三个实例。即使这可行,这 3 个实例也会通过处理源自所有实例的“已完成事件”来相互干扰。

我看到的唯一解决方案是更改子传奇以生成单独的相关 ID 以及保留发起者 ID。例如:

这个问题是否有“最佳实践”解决方案?我一直在考虑使用 Bus.Reply,在子传奇完成时通知 MainSaga。问题是另一个消费者也在发送 MySubProcessCommand 而不等待完成的事件/回复。

0 投票
1 回答
54 浏览

viewmodel - 是否有首选方法在 Web 应用程序中列出 sagadata?

我有一个包含超时的传奇,它将在未来触发业务流程。这个传奇可以基于来自核心系统的“取消”事件或由客户处理程序手动结束。客户处理程序需要能够在某些键值上查询计划流程并手动取消超时(例如结束 saga)。

该系统将由所描述的 saga 和一个具有搜索功能的 Web 应用程序组成,该应用程序将列出计划的进程以及向 sagas 发出“取消”命令的可能性。

那么问题是如何列出计划的业务交易(此信息存储为 saga 数据)?最天真的解决方案是直接访问 saga 数据,这可能不是一个好主意,因为这是 saga 的内部数据,并且可以更改存储等。

0 投票
1 回答
1264 浏览

domain-driven-design - 什么是 sagas,为什么它们使用事件驱动架构?

我遇到了以下代码:

从上面代码中的事物看,sagas 似乎是某种更高级别的事件协调器/控制器。这是真的吗?如果是这样,它们是否仅用于事件驱动架构?最后,传奇是基础设施的一部分吗?

第一个问题似乎得到了回答。但就责任(即基础设施)而言,它们真正属于哪里?领域 ?. 这些是否仅适用于 EDA?

0 投票
1 回答
111 浏览

nservicebus - nservicebus db插入重复

我们有一个数据加载器服务,它使用 NServiceBus 将数据(如果不存在)插入 SQL DB。队列配置为 Concurrencylevel > 1,因为要加载的数据可能会变得很大。由于 Concurrencylevel > 1,它会导致重复插入。有没有办法在 NServiceBus 中处理这个问题。

注意:我们已经考虑并排除了创建线程安全锁