2929import org .springframework .amqp .rabbit .batch .SimpleBatchingStrategy ;
3030import org .springframework .amqp .rabbit .core .RabbitTemplate ;
3131import org .springframework .amqp .rabbit .listener .AbstractMessageListenerContainer ;
32+ import org .springframework .amqp .rabbit .listener .MessageListenerContainer ;
3233import org .springframework .amqp .rabbit .listener .api .ChannelAwareMessageListener ;
3334import org .springframework .amqp .support .AmqpHeaders ;
3435import org .springframework .amqp .support .converter .MessageConverter ;
@@ -67,7 +68,9 @@ public class AmqpInboundGateway extends MessagingGatewaySupport {
6768
6869 private static final ThreadLocal <AttributeAccessor > ATTRIBUTES_HOLDER = new ThreadLocal <>();
6970
70- private final AbstractMessageListenerContainer messageListenerContainer ;
71+ private final MessageListenerContainer messageListenerContainer ;
72+
73+ private final AbstractMessageListenerContainer abstractListenerContainer ;
7174
7275 private final AmqpTemplate amqpTemplate ;
7376
@@ -96,17 +99,17 @@ public AmqpInboundGateway(AbstractMessageListenerContainer listenerContainer) {
9699 }
97100
98101 /**
99- * Construct {@link AmqpInboundGateway} based on the provided {@link AbstractMessageListenerContainer }
102+ * Construct {@link AmqpInboundGateway} based on the provided {@link MessageListenerContainer }
100103 * to receive request messages and {@link AmqpTemplate} to send replies.
101- * @param listenerContainer the {@link AbstractMessageListenerContainer } to receive AMQP messages.
104+ * @param listenerContainer the {@link MessageListenerContainer } to receive AMQP messages.
102105 * @param amqpTemplate the {@link AmqpTemplate} to send reply messages.
103106 * @since 4.2
104107 */
105- public AmqpInboundGateway (AbstractMessageListenerContainer listenerContainer , AmqpTemplate amqpTemplate ) {
108+ public AmqpInboundGateway (MessageListenerContainer listenerContainer , AmqpTemplate amqpTemplate ) {
106109 this (listenerContainer , amqpTemplate , true );
107110 }
108111
109- private AmqpInboundGateway (AbstractMessageListenerContainer listenerContainer , AmqpTemplate amqpTemplate ,
112+ private AmqpInboundGateway (MessageListenerContainer listenerContainer , AmqpTemplate amqpTemplate ,
110113 boolean amqpTemplateExplicitlySet ) {
111114 Assert .notNull (listenerContainer , "listenerContainer must not be null" );
112115 Assert .notNull (amqpTemplate , "'amqpTemplate' must not be null" );
@@ -122,6 +125,9 @@ private AmqpInboundGateway(AbstractMessageListenerContainer listenerContainer, A
122125 this .templateMessageConverter = ((RabbitTemplate ) this .amqpTemplate ).getMessageConverter ();
123126 }
124127 setErrorMessageStrategy (new AmqpMessageHeaderErrorMessageStrategy ());
128+ this .abstractListenerContainer = listenerContainer instanceof AbstractMessageListenerContainer
129+ ? (AbstractMessageListenerContainer ) listenerContainer
130+ : null ;
125131 }
126132
127133
@@ -241,7 +247,7 @@ protected void onInit() {
241247 + "send an error message when retries are exhausted" );
242248 }
243249 Listener messageListener = new Listener ();
244- this .messageListenerContainer .setMessageListener (messageListener );
250+ this .messageListenerContainer .setupMessageListener (messageListener );
245251 this .messageListenerContainer .afterPropertiesSet ();
246252 if (!this .amqpTemplateExplicitlySet ) {
247253 ((RabbitTemplate ) this .amqpTemplate ).afterPropertiesSet ();
@@ -336,8 +342,9 @@ public void onMessage(final Message message, final Channel channel) {
336342 private org .springframework .messaging .Message <Object > convert (Message message , Channel channel ) {
337343 Map <String , Object > headers ;
338344 Object payload ;
339- boolean isManualAck =
340- AmqpInboundGateway .this .messageListenerContainer .getAcknowledgeMode () == AcknowledgeMode .MANUAL ;
345+ boolean isManualAck = AmqpInboundGateway .this .abstractListenerContainer == null
346+ ? false
347+ : AcknowledgeMode .MANUAL == AmqpInboundGateway .this .abstractListenerContainer .getAcknowledgeMode ();
341348 try {
342349 if (AmqpInboundGateway .this .batchingStrategy .canDebatch (message .getMessageProperties ())) {
343350 List <Object > payloads = new ArrayList <>();
0 commit comments