Как управлять подтверждением вручную с помощью Spring Cloud Stream Rabbit?

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

В моем файле конфигурации я установил режим подтверждения в РУЧНОЙ следующим образом:

spring:
  cloud:
    stream:
      bindings:
        magento-consumer:
          binder: rabbit
          destination: toto
          durableSubscription: false
          consumer:
            acknowledge-mode: MANUAL

Затем у меня есть метод receive с аннотацией @StreamListener, который принимает 4 параметра:

    @StreamListener(SinkInterface.NAME)
    public void receive(
            Message<Event> m,
            @Header(name = Queue.TO_MAGENTO , required = false) Boolean header,
            @Header(AmqpHeaders.CHANNEL) Channel channel,
            @Header(AmqpHeaders.DELIVERY_TAG) Long deliveryTag
    ) {

        //Do something

    }

Проблема в том, что параметр channel всегда равен нулю, поэтому я не могу получить заголовок amqp_channel.

org.springframework.messaging.MessageHandlingException: отсутствует заголовок «amqp_channel» для типа параметра метода [интерфейс com.rabbitmq.client.Channel]

Как я могу получить этот параметр канала? Я не понимаю, почему amqp_channel не ставится, и как его залить.

Я что-то пропустил ?


person Paul Boutes    schedule 04.05.2017    source источник


Ответы (1)


Я вижу, что имя свойства нужно исправить. Правильное имя свойства для установки acceptMode: spring.cloud.stream.rabbit.bindings.<channelName>.consumer. acknowledge-mode. Вы можете проверить здесь для получения дополнительной информации.

person Ilayaperumal Gopinathan    schedule 04.05.2017