Твоему описанию трудно следовать, и я не думаю, что это проблема языка.Насколько я понимаю, ваш производитель блокирует, потому что потребителю требуется много времени для обработки сообщения.Если это правда, это означает, что вы используете надежные сообщения и явное подтверждение после обработки сообщения.
И если это так, два возможных решения: (1) решить, действительно ли вам нужны гарантии и использоватьнеявное подтверждение и / или недолговечные сообщения, если нет, или (2) надежно сохранить сообщение в получателе, подтвердить, а затем обработать сообщение.
На основании ваших правок краткий ответ:«Да, вы можете создавать темы.»Поскольку производителя не волнует, способен ли потребитель обработать сообщение, у вас есть большая гибкость в том, как вы его обрабатываете.
Я подозреваю, что ActiveMQ обладает некоторым свойством, которое позволит вам контролироватьколичество потоков обработки сообщений.Я не использовал его широко (предпочитаю HornetQ), поэтому не могу дать однозначного ответа.
Однако, даже если это так, я бы предпочел использовать Java ThreadPoolExecutorService
(думаю, это названиеоб этом; см. java.util.concurrent
).Основная причина в том, что он предоставляет свою собственную внутреннюю очередь работы.Независимо от того, сколько потоков вы добавляете в среду обмена сообщениями, всегда есть вероятность, что у вас будет достаточно работы, чтобы связать их.С ExecutorService
вы будете продолжать получать и помещать в очередь сообщения, пока не закончится память (и если это произойдет, у вас есть некоторые проблемы с дизайном, которые нужно решить).