Не уверен насчет других, но вот некоторые мысли.
Во-первых: я не уверен, что именно вы беспокоитесь.ActiveMQ хранит сообщения в хранилище данных;все данные не должны храниться в памяти в каком-либо одном месте (брокер или клиент).Таким образом, вы должны быть хороши в этом отношении;более ранние версии требовали, чтобы все идентификаторы помещались в памяти (не уверен, что это было решено), но даже это использование памяти было бы достаточно низким, если бы у вас не было десятков миллионов сообщений в очереди.
Что касаетсяObjectMessage vs blob;Необработанный байтовый массив (blob) должен быть наиболее компактным представлением, но поскольку все они сериализуются для хранения, это влияет только на использование памяти клиентом.Предварительная выборка в основном помогает с задержкой доступа;но, учитывая, что они медленно обрабатываются, вам, вероятно, не нужна предварительная выборка;так что да, либо установите его на 1 или 2, либо полностью отключите.
Что касается гарантий: лучшее, что могут гарантировать распределенные очереди сообщений, - это хотя бы один раз (с возможными дубликатами) или самое большее один раз(без дубликатов, могут потерять сообщения).Обычно лучше взять хотя бы один раз и заставить клиентов к дедупликации, используя предоставленные клиентом идентификаторы.Способ отправки подтверждения зависит от спецификации JMS, поэтому вы можете прочитать больше о JMS;это не относится к ActiveMQ.И да, вы должны установить достаточно большой тайм-аут, чтобы работник обычно мог завершить работу, включая все задержки в сети.Это может замедлить повторную передачу пропущенных сообщений (если сработало, умирает), но, вероятно, это не проблема для вас.