使用MessageListener
从队列中使用消息之后,立即不会从队列中获取另一条消息。它正在等待,直到我的功能完成,然后队列中又出现另一条消息。如何快速从队列中获取消息而不依赖于我的功能。
功能完成后消耗ActiveMQ消息
•
问答
yechuan09 回答:功能完成后消耗ActiveMQ消息
假设onMessage()
实现中的MessageListener
方法正在执行您的所有“功能”,这就是消息消耗比您想要的慢的原因,因为onMessage()
必须在消耗之前完成另一则消息。
有多种方法可以解决此问题(无特定顺序):
- 将Jave EE应用程序服务器与MDB一起使用。 MDB被合并,因此它们可以同时处理多个消息。
- 使用Spring JMS的
DefaultMessageListenerContainer
可以同时使用消息。 - 使用Apache Commons Pool之类的池库来实现自己的
MessageListener
池。 - 当您的
MessageListener
收到一条消息时,请从线程池中获取一个线程,并在该线程中处理该消息,以使MessageListener
可以更快地接收消息。我用这种方法看到的唯一真正的问题是它限制了您确认消息的方式。简而言之,您应该先确认消息 ,然后再将其传递给新线程。