Как запретить Spring AMQP блокировать незапакованные сообщения?

У меня есть _ 1_ аннотированный метод, для которого Spring AMQP блокируется после возврата из метода. Базовая ссылка _ 2_ использует _ 3_. Я пока не хочу подтверждать сообщение в методе слушателя.

Есть ли способ избежать блока Spring AMQP в таком сценарии?

Более подробно

Я использую такой слушатель:

@RabbitListener(queues = "#{ @myQueue }")
void recordRequestsFromMyMessages(
        @Payload MyMessage myMessagePayload,
        @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag,
        Channel channel) {

    // record relevant parts of the given message and combine them with
    // parts from previous/future messages
    // DON'T acknowledge the consumed message, yet; instead only keep a
    // record of the channel and the delivery tag
}

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

При моем текущем подходе Spring AMQP блокируется после возврата из вызова метода recordRequestsFromMyMessages, описанного выше, и никакие дальнейшие сообщения больше не потребляются из той же очереди.

Этот ответ SO предполагает, что пакетная обработка должна работать, однако я не знаю, как это сделать.


person Chriki    schedule 09.05.2016    source источник


Ответы (1)


«Блокирует» не контейнер.

Вам необходимо увеличить prefetchCount в контейнере (по умолчанию 1) - брокер разрешает только это количество неупакованных сообщений быть ожидающими.

person Gary Russell    schedule 09.05.2016