【发布时间】:2011-11-22 14:49:53
【问题描述】:
我在 pub/sub 应用程序中使用 NServiceBus 来获取 Web 应用程序上的事件通知。现在,当发生某些事情(例如创建便笺)时,会创建一条消息并在总线上发送,然后订阅者将其接收并确定谁需要收到事件的电子邮件或 SMS 通知。
我想做的是在某些事件的处理流中延迟。此延迟的目的类似于直播电视上的旧 7 秒延迟 - 它为触发事件的用户提供了撤消他们所做操作的时间。
考虑我们的CommentCreated 事件。当我的服务层保留新评论时发送此事件。此评论可以标记为私有或内部,用户创建评论然后意识到他们应该将其标记为私有的情况并不少见。
我想在没有 Sagas 的情况下完成这个延迟 因为,一方面,我不了解它们,另一方面,对于这种简单的要求,对于三个我不想处理另一个数据库服务器来保存他们的数据。 ghetto 选项是在我的订阅者的处理程序中设置一个计时器,并在处理前等待几分钟,但这感觉不对。
是否可以在 NServiceBus 中做到这一点?我知道有些人会说创建一个轮询服务,但这有点违背了服务总线的目的......
【问题讨论】:
-
您是否有任何理由不能让用户看到 UI 上的注释,然后再将它们推回后端?
-
好吧,既然我已经有了 NSB pub/sub,我想在那里处理它。这会增加持久化笔记的复杂性,但会延迟事件触发,因为该应用程序是一个 Web 应用程序(MVC,因此没有状态)。我只是说短暂的延迟——不超过 5 分钟。
-
我在想你会将笔记保存在 DOM(jQuery 或其他)中,而不是 Bus.Send() 到服务器,直到他们采取一些行动(按钮,离开页面)。在他们真正想要保存之前,这将是一个沙盒。
-
另外,根据您的发布方式,您可能需要查看以下内容:make-awesome.com/2010/10/…
-
是的,我已经在使用 Bus.Send(),而且事件还是通过服务层来的。像这样坚持在 DOM 中是行不通的,因为我希望即使在他们离开页面后也能够停止事件。
标签: nservicebus publish-subscribe