假设您喜欢当前的设计,并且只关心实现,那么在这里我看到的唯一关心的原因是任何可能的并发访问
javax.jms.Session
. 这个
Session
不是线程安全的,因此不应同时被多个线程访问。一
javax.jms.Connection
是线程安全的,所以这不是一个问题。为每个消费者创建会话可能更安全/更简单。会话的重量非常轻,所以我不会期望任何真正的性能下降。
为了避免会话并发问题,您甚至可以考虑使用连接池(例如
PooledJMS
基于ActiveMQ的连接池实现)。
您的预取大小
可以
如果你开始遇到消费者饥饿问题,这是个问题,但是你没有指出你的信息量会是多少,所以很难说这是否会是个问题。要记住两件事:
-
信息量越大,消费者就越不可能挨饿。
-
消费者处理消息所花费的时间越长,其预取大小应越小。
相应地调整预取大小。
关于总体设计,我忍不住想
javax.jms.MessageListener
在这里实施会更好。单个messageListener可以获取消息并将其传递给线程进行处理。这将避免Quartz依赖和轮询。