我正在审查一个用Java编写的客户机-服务器应用程序。服务器接收JMS消息并对其进行处理,但是消息可能以意外的顺序到达,并且取消消息可以在订单消息之前到达。你是如何处理这样的案例的?您是否在mdb中执行此操作?
这种情况下有哪些策略或模式?
发布于 2010-02-24 17:59:25
如果您的系统能够处理无序消息,那么它将变得更加灵活。我过去用来解决这个问题的模式是使用延迟队列(在金融领域每天处理800万条消息的系统上)。
在您的示例中,如果我收到尚未收到的订单的删除,我会将其延迟一段时间,然后重试。如果我仍然不知道我被要求删除的订单,我会抛出某种错误(回复原始发送者,发送一条消息到一个特殊的错误队列,...)。
至于延迟队列的实现,这可以是另一个JMS队列,它具有可以接受要延迟的消息的服务。然后,它定期读取延迟的消息,并检查延迟的时间段是否已过期,并将消息重新提交到原始目标队列。
发布于 2010-02-24 18:28:55
我赞同关于检查EAI站点的建议,以及它所基于的书(一本关于MOM和MOM模式的奇妙的文本)。
不过,就我个人而言,我会调查Resequencer。
https://stackoverflow.com/questions/2252085
复制相似问题