我们目前有一个Singleton Saga(在此实现:https://lostechies.com/jimmybogard/2015/04/17/saga-implementation-patterns-singleton/),它会在特定超时后重新发送消息。
这样可以正常工作,因为相应的处理程序可以捕获消息并执行它的操作。 不幸的是,例如在安装日,赶上Messagesis的Handler停止了,但Saga带着幸福的无知继续产生消息。根据处理程序不在的时间,队列中充满了消息。 由于此消息仅触发完全加载,因此每次在总线上只有一条消息就足够了。我有几种可能性:
最简单的解决方案是有可能将消息标记为单身,但我没有找到任何提示,如何做到这一点。检查队列的第二个最简单的方法,对于给定的接口来说似乎也不那么容易。
是否有任何缺失的可能性或是否有一种方法,哪种方法更适合NServiceBus背后的思维方式?
答案 0 :(得分:0)
TimeToBeReceived是一个不错的选择,但在端点启动并运行时无效。消息没有时间到期并将被处理。
传奇方法可行,但这意味着每个系列都有一些带有一些唯一标识符的消息系列。我在你的描述中没有看到。
鉴于处理端点可以在任何时间点离线,我假设可能多次发送一般的启动消息(非唯一),而端点关闭。我将处理程序放在一个单独的端点中,并将该端点配置为discard old messages at startup。这样,端点关闭时发出的所有消息都将被丢弃。有一些警告。
如果第二个要点是你所面对的,那么拥有一个国家是不可避免的。