ActiveMq, неиспользованные сообщения всегда в памяти брокера? - PullRequest
1 голос
/ 10 августа 2011

Я использую ActiveMQ и у меня есть вопрос о том, как и когда сохраненные сообщения действительно переносятся на диск в ожидании потребителя?

Я использую виртуальные темы и создайте очереди потребителей, чтобы получать от них сообщения.Все сообщения сохранены (я проверил, что записи для всех неиспользованных сообщений действительно присутствуют в постоянном хранилище)

У меня есть несколько потребителей, которые регулярно подключаются и отключаются.Подключив jconsole к activemq, я заметил, что ВСЕ неиспользуемые сообщения , похоже, содержатся в памяти брокера.Они не меняются местами на диск, по крайней мере, я не смог это проверить.Установка memoryUsage или включение producerFlowControl - не имеет никакого эффекта.Брокер блокируется, если лимит memoryUsage достигнут при включенном управлении потоком, или MemoryPercentUsage продолжает увеличиваться, если управление потоком отключено.

Когда именно activemq освобождает память путем сохранения сообщений на диске / в постоянном хранилище?Или это так?Как я могу убедиться, что дисковое пространство, а не оперативная память, ограничит посредника в долгосрочной перспективе, когда в очереди будут миллионы неиспользованных (ожидающих) сообщений?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2015

попробуйте использовать storeCursor и установить ограничение памяти в destinationPolicy, это приведет к введению ограничения для каждой очереди на объем памяти / сообщений, которые он будет извлекать с диска ...

   <destinationPolicy>
        <policyMap>
            <policyEntries>
                <policyEntry queue=">" producerFlowControl="false" memoryLimit="100mb">
                    <pendingQueuePolicy>
                        <storeCursor/>
                    </pendingQueuePolicy>
                </policyEntry>
            </policyEntries>
        </policyMap>
    </destinationPolicy>
0 голосов
/ 12 августа 2011

Пожалуйста, перепроверьте с включенным memoryUsage, вы можете указать разные пределы, при которых сообщение должно сохраняться. В приведенном ниже примере, когда 64 МБ памяти заполнено, оно начинает запись на диск до 100 ГБ.

...