消费者缓慢的ActiveMQ会跳过200条消息

时间:2012-02-21 01:33:28

标签: spring activemq mule

我使用ActiveMQ和Mule(一种基于Spring的ESB)。 我们有一个快速的生产者和一个缓慢的消费者 它只与一个消费者同步配置。

这里是春季风格的消费者配置:http://pastebin.com/vweVd1pi

最大的要求是保持消息的顺序。 然而,在运行此代码几小时后,突然,ActiveMQ跳过200条消息,并发送下一条消息。在activeMQ中仍有200条消息,它们不会丢失。 但是我们的客户端(Mule)确实有一些自定义代码来检查消息的顺序,使用唯一标识符。

几个月前我已经遇到过这个问题了。我们使用参数" jms.prefetchPolicy.queuePrefetch = 1"来更改使用者。当这个问题再次出现在另一个消费者身上时,它似乎运作良好并成为我们现在需要的解决方案。

是错误还是配置问题?

1 个答案:

答案 0 :(得分:0)

我不能从Mule的角度谈论这个要求,但是你应该看看有几个代理功能。有两种方法可以保证ActiveMQ中的消息排序:

Message groups是一种确保同一消费者按照放置在队列上的顺序使用一组相关消息的方法。要使用它,您需要在相关消息上指定JMSXGroupID标头,并为它们分配递增的JMSXGroupSeq编号。如果消费者死亡,来自该组的剩余消息将被发送给另一个消费者,同时仍然保留订单。

Total message ordering适用于主题上的所有消息。它基于每个目标在代理上配置,并且不需要对客户端代码进行特定更改。它带有同步开销。

这两项功能都允许您扩展到多个消费者。