Apache Camel RabbitMQ оставил позади потоки в состоянии WAIT - PullRequest
2 голосов
/ 11 декабря 2019

У меня есть набор маршрутов Camel, настроенных для чтения и записи в очереди RabbitMQ, примерно так:

from("rabbitmq:$rabbitMQVhost?connectionFactory=#customConnectionFactory&queue=${it.rabbitMQQueue}&routingKey=${it.rabbitMQQueue}&SOME_MORE_PROPERTIES")
    .log("Read message from queue ${it.rabbitMQQueue}")
    .routeId(it.rabbitMQQueue)
    .noAutoStartup()
    .bean(it.rabbitMQBean)
    .choice()
    .`when`(PredicateBuilder.and(simple("$myCondition"), isNotNull(body())))
        .split(body())
        .toD("rabbitmq:$rabbitMQVhost?connectionFactory=#customConnectionFactory&queue=${it.rabbitMQQueueDestination}&autoDelete=false&routingKey=${it.rabbitMQQueueDestination}&bridgeEndpoint=true")
        .endChoice()
    .otherwise()
    end()

Где SOME_MORE_PROPERTIES - это в основном autoDelete=false&autoAck=false и некоторые параметры предварительной выборки сообщений.

Моя ConnectionFactory является org.springframework.amqp.rabbit.connection.CachingConnectionFactory.

Всякий раз, когда в мою исходную очередь поступает сообщение, запускается поток для его обработки;однако после завершения обработки она зависает в состоянии WAIT, никогда не освобождаясь и не завершаясь, поэтому память моего приложения через некоторое время насыщается, и сборщик мусора ничего не может с этим поделать.

После некоторого времени работы мойприложение в основном находится в этом состоянии:

enter image description here

Если я вручную перезапущу маршруты, потоки будут прерваны, а память освобождена.

Есть ли что-то, что я делаю неправильно в моей конфигурации маршрутов, которая препятствует правильному завершению потоков?

Я бы хотел избежать необходимости писать кварцевое задание для перезапуска маршрутов время от времени.

Редактировать: Я также недавно обновился с Camel 2.24.0 до последней версии RC для Camel 3, но проблема все еще возникает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...