在关于JMS的this好文章中,Bruce Snyder(“ActiveMQ in Action”的作者)提到:
实现与Spring DMLC一起使用的消息监听器的选项[一]是使用javax.jms.MessageListener - 它是来自JMS规范的标准化接口,但处理线程由您决定
他没有谈论其他两个选项中的线程:Spring SessionAwareMessageListener和MessageListenerAdapter。
我的问题是:与其他两种方法相比,使用普通javax.jms.MessageListener需要解决哪些其他线程问题?
我在想,无论我从上面的3中选择什么选项,如果我的监听器将在多个线程上接收消息,我的监听器实现必须是线程安全的。
我浏览了Bruce在github中为所有三个选项创建的示例。 在任何情况下我都没有看到任何针对线程的特定处理。 simple和session-aware消费者的xmls几乎相同。
答案 0 :(得分:2)
只要您不在MessageListener
实现中保留任何状态(通过实例变量),您就不必担心使用这三种方法中的任何一种进行线程安全。如果你保持状态,那么就像在任何多线程场景中一样,你将不得不关注如何同步对状态的访问。