我在pub / sub应用程序中使用NServiceBus在Web应用程序上进行事件通知。现在,当某些事情发生时(如创建了一个音符),会在总线上创建并发送一条消息,然后用户将其选中并确定谁需要收到有关该事件的电子邮件或短信通知。
我想要做的是在某些事件的处理流中加入延迟。这种延迟的目的类似于直播电视上的旧的7秒延迟 - 它让用户激发了事件时间来撤消他们所做的事情。
考虑我们的CommentCreated
事件。当我的服务层持久保留新评论时,会发送此事件。此评论可以标记为私有或内部,并且用户创建评论然后意识到他们应该将其标记为私有并不罕见。
我想在没有 Sagas的情况下完成这个延迟,因为,对于其中一个,我对它们并不精明,对于两个,它们似乎对于这个简单的一个有点过分。要求,对于三个我不想要处理另一个数据库服务器来保存他们的数据。 ghetto选项是在我的订阅者的处理程序中设置一个计时器并在处理之前等待几分钟,但这只是感觉不对。
是否可以在NServiceBus中执行此操作?我知道有些人会说要创建一个轮询服务,但这样做会破坏服务总线的目的......
答案 0 :(得分:2)
除了sagas之外,没有其他方式可以使用NServiceBus自己的Saga<...>
,或者通过自己有效地实现saga - 并使用某种超时机制,例如: NServiceBus的超时服务。
我同意你的看法,满足这一要求可能很简单 - 只要所需的基础设施到位!但是,如果你坚持建立这种贫民窟的方式,我不认为满足要求很简单。
即。当您使用适当的超时服务设置NServiceBus并使用持久传闻的方法时,实现这一点很简单。
但是,用计时器和诸如此类的方法来解决这个问题只会引起各种各样的麻烦,例如:当IIS回收您的Web应用程序等时,计时器不会触发