Spring JMS消息侦听器容器

时间:2009-06-04 19:37:57

标签: java spring tomcat jms activemq

我是JMS的新手,我正在使用Tomcat 6和Spring设置ActiveMQ。我已经配置了大部分基本内容,但是我对Spring提供的Message Listener Containers有点困惑。阅读文档听起来像消息侦听器容器用于“处理”订阅(我正在使用主题),取消订阅并将消息传递给侦听器。我不确定我是否正确地思考这个问题。如果是这种情况,我没有看到任何关于如何让多个类使用Message Listener Container订阅同一主题的文档。我看到你可以设置messageListener属性,但这只允许一个类能够订阅一个主题。为了让另一个订阅者(Message Driven POJO)听同一主题,创建同一个Message Listener Container的另一个实例似乎不正确。

任何人都可以为我阐明这一点吗?我想我可能有点困惑。

提前致谢!

3 个答案:

答案 0 :(得分:4)

如果您熟悉消息驱动的EJB,那么Spring MessageListenerContainer实际上是替代MDB。它得名,因为它与JMS主题/队列以及单个JMS MessageListener连接在一起,它从该主题/队列中提取消息并将它们提供给MessageListener。

你是非常正确的,一次只能为每个容器注册一个MessageListener,但考虑到MessageListenerContainer代码可能非常复杂,它实际上是一个非常轻量级的运行时组件。不要害怕创建它的几个实例。

此外,请确保为您的情况选择适当的MessageListener实现。 Simple和Default实现真的很不一样,但两者都不是“更好”。

答案 1 :(得分:2)

多个容器可以帮助您,这是正确的,但它看起来像是错误的方法。由于JMS的目标是集成不同的应用程序/服务而不是内部应用程序进程(您谈论的几个类)。在Message Listener接收后,我建议自己将消息推送到不同的类。否则,您可以查看Apache Camel或Spring Integration等框架。

答案 2 :(得分:0)

容器是一种包装,用于“调整”任何POJO以接收来自队列或主题的消息。如果你想要多个听众,你最终会得到多个容器。