我知道这对许多人来说似乎相当明显,但我的客户正在使用一种我不太方便的模式。我们应该如何处理使用nservicebus的长时间运行过程
情况是,他们的客户发送通过nservicebus发送到第三方系统的存款或取款。第三方系统需要处理该交易,但交易完成前可能需要几天甚至几周的时间。
今天的解决方案是创建一个传奇,它首先发送一条消息将事务交给第三方系统。完成后,传奇下一步是检查完成更新。如果事务未完成,则发送requesttimeout,“等待”。当达到超时时,再次执行相同的检查,并发送新的requesttimeout ...等等。这有一直是一个永恒的循环。它还做了什么是一次又一次地完全填充同一个SagaTimeout的ServiceInsight。
我一直在寻找单反,但它似乎缺乏。我只需要针对特定消息进行多次重试,而不是针对所有消息。
要添加,第三方系统不能发送事务已完成,这意味着我们需要轮询完成更新。
另外,我相信更好的解决方案是保存交易状态,将交易发送给第三方并完成这个特殊的事件。然后有一个使用时间间隔检查完成更新的传奇。
以这种方式使用sagatimeouts是一种常见模式吗?而且,有一个传奇/处理程序只检查完成更新是一个更好的解决方案吗?
在这种情况下,您是否建议集成服务是一个单独的端点内的nsb传奇,基本上只处理超时/轮询? – Trygve
可能,是的 - 但也许没有必要使用它的传奇?投票不能像“System.Timers.Timer”这样简单的轮询一次,并将其发现作为事件发布? – mookid8000
这听起来像mookid8000建议我最初的想法,投票外最初的传奇。 Trygve说它已经正确实施了。两者都可以,但是,真正的NServicebus方式是什么?我最初的想法是,暂停这个传奇并重新初始化新的游戏并不是一个好主意......但也许这就是做到这一点的方法 – Per