功能完成后消耗ActiveMQ消息

时间:2019-12-03 12:49:00

标签: jms activemq consumer

使用MessageListener从队列中使用消息之后,立即不会从队列中获取另一条消息。它正在等待,直到我的功能完成,然后队列中又出现另一条消息。如何快速从队列中获取消息而不依赖于我的功能。

1 个答案:

答案 0 :(得分:0)

假设onMessage()实现中的MessageListener方法正在执行您的所有“功能”,这就是消息消耗比您想要的慢的原因,因为onMessage()必须在消耗之前完成另一则消息。

有多种方法可以解决此问题(无特定顺序):

  • 将Jave EE应用程序服务器与MDB一起使用。 MDB被合并,因此它们可以同时处理多个消息。
  • 使用Spring JMS的DefaultMessageListenerContainer可以同时使用消息。
  • 使用Apache Commons Pool之类的池库来实现自己的MessageListener池。
  • 当您的MessageListener收到一条消息时,请从线程池中获取一个线程,并在该线程中处理该消息,以使MessageListener可以更快地接收消息。我用这种方法看到的唯一真正的问题是它限制了您确认消息的方式。简而言之,您应该先确认消息 ,然后再将其传递给新线程。