Я использую spring-rabbit-1.7.3.RELEASE.jar.
Я определил SimpleMessageListenerContainer в своем xml с параметром shutdownTimeout.
bean id="aContainer"
class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="rabbitConnectionFactory" />
<property name="queueNames" value="aQueue" />
<property name="adviceChain" ref="retryAdvice" />
<property name="acknowledgeMode" value="AUTO" />
<property name="shutdownTimeout" value="900000" />
</bean>
Когда моя служба закрывается, а в «aQueue» все еще есть сообщения, я ожидаю, что shutdownTimeout позволит обрабатывать сообщения. Но этого не происходит.
В ходе дальнейшего исследования я обнаружил, что метод await(), определенный в SimpleMessageListenerContainer, всегда возвращает значение true.
this.cancellationLock.await(Long.valueOf(this.shutdownTimeout), TimeUnit.MILLISECONDS);
Я хотел бы понять, как работает логика для await, как он получает блокировку и какая дополнительная настройка требуется с моей стороны, чтобы код работал.