@Test public void testAdvice() throws Exception { CachingConnectionFactory cf = new CachingConnectionFactory("localhost"); DirectMessageListenerContainer container = new DirectMessageListenerContainer(cf); container.setQueueNames(Q1, Q2); container.setConsumersPerQueue(2); final CountDownLatch latch = new CountDownLatch(2); container.setMessageListener(m -> latch.countDown()); final CountDownLatch adviceLatch = new CountDownLatch(2); MethodInterceptor advice = i -> { adviceLatch.countDown(); return i.proceed(); }; container.setAdviceChain(advice); container.setBeanName("advice"); container.setConsumerTagStrategy(new Tag()); container.afterPropertiesSet(); container.start(); RabbitTemplate template = new RabbitTemplate(cf); template.convertAndSend(Q1, "foo"); template.convertAndSend(Q1, "bar"); assertTrue(latch.await(10, TimeUnit.SECONDS)); assertTrue(adviceLatch.await(10, TimeUnit.SECONDS)); container.stop(); assertTrue(consumersOnQueue(Q1, 0)); assertTrue(consumersOnQueue(Q2, 0)); assertTrue(activeConsumerCount(container, 0)); assertEquals(0, TestUtils.getPropertyValue(container, "consumersByQueue", MultiValueMap.class).size()); cf.destroy(); }