В настоящее время я использую Spring AMQP API для подключения к RabbitMQ. В основном в моем потребительском коде я читаю сообщения асинхронно и делаю массовую вставку в эластичный поиск. когда я делаю ack = AUTO, я получаю умеренную скорость 400-500 msg / sec (чтение из очереди). когда я делаю ack = NONE, скорость чтения увеличивается, то есть до 5000-6000 msg / sec.
Конфигурация следующая:
- Машина Linux с 32 ГБ оперативной памяти
- Аргументы JVM:
-server
-Xms1g -Xmx1g -Xss384k PermSize=256m MaxPermSize=256m
Теперь проблема в том, что когда я выполняю ack = NONE, хотя я получаю хорошую скорость, JVM через некоторое время получает OutOfMemory, и я вижу, что в этом сценарии происходит много GC.
Я планирую использовать интеграцию QueueChannel из Spring, где я могу ограничить размер канала в зависимости от количества сообщений, которые он может содержать.
Как я могу реализовать это с помощью RabbitMQ, также есть ли другой способ достичь хорошей скорости чтения, например 4000-5000 msg / sec, без сбоя JVM?