必须在Rebus中按顺序传递的消息策略

时间:2014-11-12 15:51:51

标签: rebus

我使用Rebus SQLTransport和XML序列化消息与SQL Server集成。消息表示在SQL Server中完成的更改。因此,消息传递的顺序至关重要。

这是因为例如message1可能包含在message2中引用(通过id)的对象。另一个例子是message1可能包含从message2接受新对象所需的某个对象的删除请求。

将消息聚合到一条消息中会非常复杂,因为消息是由触发器生成的。

拥有消息幂等性和一个工作者我认为除了在错误发生并且消息将被移动到错误队列时不会工作的事实之外。由于验证或业务逻辑异常,很可能发生错误。因此,我相信只有人类可以用消息解决问题,直到那个时候不应该传递其他消息。所以我想征求意见,在这种情况下最好做些什么。至于我看到重试次数不能设置为无穷大,那么我应该停止处理程序内部的服务直到问题被人类解决?

提前致谢

1 个答案:

答案 0 :(得分:1)

如果按顺序处理消息而没有任何“漏洞”很重要,我建议您为每条消息分配一个序列号。

这样,如果端点获得序列号大于预期序列号的消息,则它可以抛出异常,从而防止无序消息被处理。

我只会在错误不常见的情况下执行此操作,并且仅在消息量非常小的情况下才会执行此操作。

如果需要按顺序处理,更好的设计是使用另一个支持 pull 模型的消息处理库,我认为这种方式比Rebus'推送模型。