3

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

[一个] 用于实现与 Spring DMLC 一起使用的消息侦听器的选项之一是使用 javax.jms.MessageListener - 它是 JMS 规范中的标准化接口,但处理线程取决于您

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

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

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

我浏览了 Bruce 在github中为所有三个选项创建的示例。在任何情况下,我都没有看到对线程的任何特定处理。简单会话感知消费者的 xml 几乎相同。

4

1 回答 1

2

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

于 2013-05-08T23:00:22.490 回答