2017-05-04 5 views
1

Ich habe mehrere Möglichkeiten versucht, manuelle ack mit RabbitMQ zu verwalten, insbesondere basierend auf this previous post, aber leider funktioniert keiner von ihnen.Wie man manuell mit Spring Cloud Stream Rabbit zu verwalten?

In meiner Konfigurationsdatei habe ich den Bestätigungs-Modus auf MANUAL wie folgt festgelegt:

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

Dann habe ich eine receive Methode, die von @StreamListener mit Anmerkungen versehen ist, die vier Parameter verwendet:

@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 

    } 

Das Problem ist, dass der channel Parameter immer Null ist, so dass ich den Header amqp_channel nicht abrufen kann.

org.springframework.messaging.MessageHandlingException: Fehlende Header 'amqp_channel' für Parametertyp-Methode [Schnittstelle com.rabbitmq.client.Channel]

Wie kann ich diesen Kanalparameter abrufen? Ich verstehe nicht, warum die amqp_channel nicht festgelegt ist, und wie man es injiziert.

Habe ich etwas übersehen?

Antwort

2

Ich sehe, dass der Name der Eigenschaft korrigiert werden muss. Der richtige Eigenschaftsname zum Festlegen des AcknowledgeMode lautet: spring.cloud.stream.rabbit.bindings.<channelName>.consumer. acknowledge-mode. Sie können here für weitere Informationen überprüfen.

+0

Meine schlechte, ich habe nicht auf das Feld "Kaninchen" geachtet ... –

Verwandte Themen