javax.jms.MessageListener:需要注意哪些额外的线程问题?

时间:2013-05-08 19:44:07

标签: java spring jms

在关于JMS的this好文章中,Bruce Snyder(“ActiveMQ in Action”的作者)提到:

  

实现与Spring DMLC一起使用的消息监听器的选项[一]是使用javax.jms.MessageListener - 它是来自JMS规范的标准化接口,但处理线程由您决定

他没有谈论其他两个选项中的线程:Spring SessionAwareMessageListener和MessageListenerAdapter。

我的问题是:与其他两种方法相比,使用普通javax.jms.MessageListener需要解决哪些其他线程问题?

我在想,无论我从上面的3中选择什么选项,如果我的监听器将在多个线程上接收消息,我的监听器实现必须是线程安全的。

我浏览了Bruce在github中为所有三个选项创建的示例。 在任何情况下我都没有看到任何针对线程的特定处理。 simplesession-aware消费者的xmls几乎相同。

1 个答案:

答案 0 :(得分:2)

只要您不在MessageListener实现中保留任何状态(通过实例变量),您就不必担心使用这三种方法中的任何一种进行线程安全。如果你保持状态,那么就像在任何多线程场景中一样,你将不得不关注如何同步对状态的访问。