问题标签 [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.
.net - 向 Saga 数据添加复杂类型
我正在尝试使用包含复杂类型的 SagaData 创建一个 Saga。
例如:
这可能吗?如果是这样,你如何映射它,这是一个反模式吗?我没有在网上找到任何关于这样做的资源,这让我相信我缺少一些东西。
testing - NServiceBus Saga 单元测试的依赖注入
我的问题类似于关于 DI for NserviceBus Handler for testing ( Handler ) 的问题。作为一种解决方案,您可以使用以下语法来使用构造函数注入:
我找不到在 Saga 测试中使用相同方法的方法。支持属性注入,看起来像这样:
但是,这种方法需要将我的依赖项设为公共属性。我想尽量避免它。
有没有办法使用构造依赖注入进行 Saga 测试?
nservicebus - 我们应该如何使用 nservicebus 处理长时间运行的进程
我知道这对很多人来说似乎很明显,但我的客户正在使用一种我不太方便的模式。
案例是,他们的客户发送存款或取款,通过 nservicebus 发送到第三方系统。第三方系统需要处理该交易,但可能需要数天,甚至数周才能完成交易。
今天的解决方案是创建一个 saga,它首先发送一条消息,将交易交给第三方系统。完成后,sagas 下一步是检查完成更新。如果事务未完成,则会发送 requesttimeout,“就像等待”。当达到超时时,再次执行相同的检查并发送新的 requesttimeout ......等等。这是一个永恒的循环。它所做的其他事情就是一遍又一遍地用相同的 SagaTimeout 完全填充 ServiceInsight。
我一直在研究单反,但似乎人手不足。我只需要对特定消息而不是所有消息进行多次重试。
另外,第三方系统无法发送交易已完成的事件,这意味着我们需要轮询完成更新。
另一个,我认为更好的解决方案是保存交易状态,将交易发送给第三方并完成这个特定的传奇。然后有一个使用时间间隔检查完成更新的传奇。
以这种方式使用 sagatimeouts 是一种常见的模式吗?而且,让 saga/handler 只检查完成更新是不是更好的解决方案?
c# - NServiceBus 传奇数据未创建
我想知道是否有人可以提供一些见解,了解为什么在 NServiceBus 的神秘世界中没有创建我的传奇数据。
在 NBus 附带的所有配置和 XML 地狱(默认情况下)背后,我似乎无法让我的传奇数据工作。尽管我使用我可以访问 SQL 并可以创建表、存储过程等的 Windows 凭据通过调试模式运行端点,但无论出于何种原因都没有创建该表。
我可以复制和粘贴我的配置,但这很广泛,但是我会提供我认为对这篇文章有用的内容,但是如果您需要更多信息,请大声喊叫,我会答应的。
我想我想知道需要添加什么额外的魔法才能使它起作用?
干杯,DS。
行动中的传奇..
编辑 添加当前使用的版本。
c# - Nservicebus 传奇超时
我有一个传奇,它每 30 秒检查一次 API 调用的状态,如果从调用返回的状态成功则传奇结束,否则传奇等待 30 秒并再次尝试。如果 API 调用在 60 分钟内没有返回成功响应,则 saga 超时并结束。
我无法让我的 60 分钟超时触发。我的代码是
谁能看到我哪里出错了?
谢谢
multithreading - NServiceBus 处理程序是否应该总是快速完成?
[为清晰而编辑]
我不确定我是否理解正确。
根据这些指导性的帖子,在 Saga 中,一切都应该简明扼要:
- 乔纳森奥利弗的总结:blog.jonathanoliver.com/...
- Udi Dahan 的原文:skillsmatter.com/skillscasts/...
- 和一些早期的帖子
- lostechies.com/jimmybogard/2013/03/26/scaling-nservicebus-sagas
- docs.particular.net/nservicebus/architecture/principles
也就是说你的saga应该没有业务逻辑,里面也没有if-else指令。它应该只是一个协调器,调用它应该是“面向成功的”——也就是说:在调用 Saga 之前应该尽可能多地进行验证。
但是单独的处理程序(你称它们为“独立处理程序”吗?),那些不在 saga 中的处理程序呢?以下哪项对他们来说是正确的:
一个。saga 之外的 NServiceBus 消息处理程序是否应该总是快速完成,如果有一个耗时的操作将其传递给线程并完成?
湾。还是更好地“占用”处理程序,这样 NServiceBus “知道”该消息正在被大量使用,并可以相应地采取行动 - 即通过自动负载平衡,创建处理过程的另一个实例不同的工艺甚至不同的机器?
正确的方法是什么?
您能否提供一些示例代码以及您的答案,调用一个Foo.DoTimeConsumingBar()
方法。
谢谢你。
nservicebus - NServiceBus - 使用相同的键排队 saga
场景:我用 10 个步骤构建了一个 saga。它正在更新各种系统,整个传奇可能需要几分钟才能完成。
传奇从另一个系统的数据开始,用户在其中输入客户的信息。
我无法看到用户何时在他们的系统中输入数据,但我每 x 分钟读取一次系统更改的数据。
我的问题是,每当我使用客户数据开始 saga 时,我需要确保同一客户的前一个 saga 已经完成。如果用户在输入数据上花费了 10 分钟,系统可能会针对同一个客户启动 5 个流程,并且流程可能会超过之前的流程,从而导致数据混乱。
有谁知道我该如何解决这个问题?
提前致谢。
奥莱
rabbitmq - 使用 RabbitMQ+RavenDB 的原型项目重复来自 RabbitMQ 的 SharedQueue 关闭错误
我创建了一个简单的 saga 原型项目,其中 RabbitMQ 作为传输,RavenDB 作为持久性机制。原型实际上按预期运行,但每隔几秒钟我就会收到此错误消息:
错误 NServiceBus.Transports.RabbitMQ.RabbitMqDequeueStrategy 无法从 [Assembly] 接收消息。重试 System.AggregateException:发生一个或多个错误。--> System.IO.EndOfStreamException: SharedQueue 在 RabbitMQ.Util.SharedQueue 1.EnsureIsOpen()
at RabbitMQ.Util.SharedQueue
1.Dequeue 关闭(int 32 毫秒超时.......
在上述消息之后,我也立即收到一条几乎相同的消息,但它说它无法接收来自 RabbitMGPoller.Timeouts 的消息
除此之外,还有不断的 INFO 消息说:NServiceBus.Transports.RabbitMQ.RabbitMqConnectionManager 与 RabbitMQ 代理断开连接,原因:AMQP 关闭原因,已启动库,代码 = 0 文本 =“流结束”...原因 = 系统.IOException:无法将数据写入传输连接:现有连接被远程主机强行关闭。---> System.Net.Sockets.SocketException: 现有连接被远程主机强行关闭...
我尝试将 DequeueTimeout=600 值添加到传输连接,但仍然会出现相同的错误。我也尝试在配置文件中添加以下键,但它似乎仍然没有帮助。
unit-testing - 验证 NServiceBus saga 是否不回复发起者
测试 saga 没有回复发起人的最佳方法是什么?
我看到使用 NServiceBus.Testing 我可以调用 Saga.ExpectReplyToOriginator,但我没有看到像“ExpectNotReplyToOriginator”这样的东西。我尝试使用 .ExpectNotSend() 和 .ExpectNotPublish() 并且似乎都没有在我期望的地方失败。
nservicebus - 优化 saga 查找
我有一个以并行线程从远程位置下载文件的过程。每个线程在开始下载时发送一条消息,在下载完成时发送第二条消息。两条消息都有一个下载 id 属性 (guid) 来关联两者。
接下来我有一个监控这些下载的传奇。它由 DownloadStarted 事件启动,并使用超时来检测是否及时收到了 DownloadEnded 事件。
我遇到的问题是,当在短时间内(1 分钟内下载 1000 个文件)下载大量文件时,saga 的性能并不是那么好。在某些时候,它需要半个多小时才能赶上。
我试图通过提供 IFindSagas 实现来加速 saga 查找。这并没有太大帮助,因为这导致 RavenDB 在 saga 数据中的 DownloadId 上创建一个自动索引,但也导致 FindBy 方法经常返回 null,因为该索引没有及时更新。
有没有其他方法可以尝试加速传奇?我正在考虑使用 DownloadId 作为 saga id,因为这已经是一个独特的 guid。saga 数据的 Id 属性是可设置的,但文档明确指出您不应该自己设置 id...
使用的传输:MSMQ 使用的持久性:RavenDB NServiceBus 版本:5