Исключение Spring AMQP OutOfMemory - PullRequest
0 голосов
/ 21 мая 2019

Я сталкиваюсь с этой проблемой, когда JVM запускает OutOfMemory и очередь застревает в результате частого перезапуска контейнера. Хотя у меня есть обработчик исключений в слушателе очереди, он не работает.

Это мое приложение. Свойства

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.listener.simple.concurrency=3
spring.rabbitmq.listener.simple.max-concurrency=10
spring.rabbitmq.listener.simple.idle-event-interval=60000
spring.rabbitmq.listener.simple.prefetch1
spring.rabbitmq.listener.simple.retry.max-attempts=1
spring.rabbitmq.listener.simple.default-requeue-rejected=false

а это мой слушатель

@RabbitListener(
    bindings = @QueueBinding(
        value = @Queue(value = "queue", durable = "true"),
        exchange = @Exchange(value = "exchange", type = ExchangeTypes.TOPIC),
        key = RabbitConfiguration.RULE_SERVICE_ROUTING_KEY
    )
)
public void processMessage(final Order order, final Message message) {

    try {

        // OutOfMemory is happening inside this service which calls Drools  
        this.service.run(order);      

    } catch (Throwable throwable) {

        logger.info("Message failed");
        throw new AmqpRejectAndDontRequeueException(throwable);
    }
}
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-4"

Сервисный код

public void run(Order order) {

    try {

        kieSession = this.getContainer(group, artifact, version).newKieSession();
        this.setUpListeners(kieSession);
        kieSession.insert(order);
        kieSession.fireAllRules();

    } catch (Throwables t) {

       throw new Exception(t);

    } finally {

        kieSession.dispose();
    }
}

Есть ли способ отклонить это сообщение и поместить его в очередь недоставленных сообщений.

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