В моем приложении мы используем маршрут Camel для чтения сообщений из очереди RabbitMQ. Конфигурация выглядит следующим образом:
from("rabbitmq:myexchange?routingKey=mykey&queue=q")
Производитель может отправить 50 тыс. Сообщений в течение нескольких минут, и каждое сообщение может занять 1 секунду или более.
Что я вижу, так эточто ВСЕ сообщения потребляются очень быстро, но обработка этих сообщений может занять много часов. Ожидается много часов обработки, но означает ли это, что 50k-сообщения хранятся в памяти? Если это так, я хотел бы отключить это поведение, потому что я не хочу терять сообщения, когда процесс останавливается ... На самом деле, мы теряем большинство сообщений, даже когда процесс продолжает работать, что еще хуже. Похоже, что соединитель не предназначен для одновременной обработки большого количества сообщений, но я не могу сказать, является ли это из-за самого соединителя или потому, что мы не настроили его должным образом.
Я попытался с опцией autoAck:
from("rabbitmq:myexchange?routingKey=mykey&queue=q&autoAck=false")
Таким образом, сообщения откатываются, когда что-то идет не так, но одновременное сохранение неподтвержденных сообщений 50k не кажется хорошей идеей ...