Если вам нравится текущий дизайн и вас беспокоит только реализация, то единственная причина для беспокойства, которую я здесь вижу, - это любой возможный одновременный доступ к javax.jms.Session
. Session
не является потокобезопасным, поэтому к нему никогда не должен обращаться более чем один поток одновременно. javax.jms.Connection
является поточно-ориентированным, так что это не проблема. Может быть безопаснее / проще просто создать сеанс для каждого потребителя. Сессии довольно легкие, поэтому я не ожидаю реального снижения производительности.
Чтобы избежать проблем параллелизма сеанса, вы можете даже рассмотреть возможность использования пула соединений (например, PooledJMS , который основан на реализации пула соединений ActiveMQ).
Ваш размер предварительной выборки может быть проблемой, если вы начнете сталкиваться с проблемами потребительского голодания, но вы не указываете, каким будет объем вашего сообщения, поэтому трудно сказать, будет ли это выпускать или нет. Следует помнить две вещи:
- Чем больше объем сообщений, тем меньше вероятность того, что потребители будут голодать.
- Чем дольше потребителю требуется обработать сообщение, тем меньше должен быть его размер предварительной выборки.
Отрегулируйте размер предварительной выборки соответственно.
Что касается дизайна в целом, я не могу не думать, что реализация javax.jms.MessageListener
была бы лучше здесь. Один MessageListener может получать сообщения и передавать их потокам для обработки. Это позволит избежать зависимости от кварца, а также опрос.