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