Jms 在从死信通道取消同步时确保排序

Jms 在从死信通道取消同步时确保排序,jms,apache-camel,activemq,Jms,Apache Camel,Activemq,我正在使用camel与activemqjms集成。我正在接收此队列中产品的价格。我在productId上使用JMSXGroupID来确保跨productId进行排序。现在,如果我无法处理此消息,我会将其移动到死信队列。这可能是由于依赖服务上的连接错误或消息本身的错误造成的。 对于前者,我必须手动将其从DLQ中删除,并将其放回JMS队列。 现在的问题是,我不知道是否已经收到并处理了groupId上的任何其他消息。因此,不考虑DLQ将扰乱秩序。另一方面,如果我不取消它,并且没有收到其他消息,则产品I

我正在使用camel与activemqjms集成。我正在接收此队列中产品的价格。我在productId上使用JMSXGroupID来确保跨productId进行排序。现在,如果我无法处理此消息,我会将其移动到死信队列。这可能是由于依赖服务上的连接错误或消息本身的错误造成的。 对于前者,我必须手动将其从DLQ中删除,并将其放回JMS队列。 现在的问题是,我不知道是否已经收到并处理了groupId上的任何其他消息。因此,不考虑DLQ将扰乱秩序。另一方面,如果我不取消它,并且没有收到其他消息,则产品Id将无法获得正确的价格。
我想到的一个解决方案是使用快捷键值storeRedis来存储productIdmessage组的最后一个messageId或JMSTimestamp。每次我将消息出列时,此消息都会更新。还有其他解决办法吗

依赖JMS中的消息顺序是一项风险很大的业务,充其量也是如此。 作为一种特殊情况,最好的做法是让接收方处理无序的消息,但可以在正常操作期间利用消息顺序

您可能还想区分两个错误:定位消息和临时连接问题,甚至可能使用两个不同的错误队列。在posion消息无效负载等的情况下,除了开始bug调查之外,您实际上无能为力。在这种情况下,您可能会发送其他内容,例如伪消息,以避免干扰顺序

对于连接问题,您可以采用另一种策略—ActiveMQ重新交付策略。如果出现网络故障,通常在处理第一条消息之前,尝试处理第二条消息是没有用的。如果您只有一个消费者,则退货政策可确保您的退货。海报上确实有一个解决你问题的方法,并且想要避免它。读一下