title: Spring amqp delay messaging with rabbitMQ
body: <p>I am struggling hard to find out the way for scheduled/Delaying messages in Spring AMQP/Rabbit MQ and found solution in here.But i still with a prolem 
  about Spring AMQP/Rabbit MQ which can not received any message.</p>
  
  <p>My source as the following:</p>
  
  <pre><code>@Configuration
  public class AmqpConfig {
  
      @Bean  
      public ConnectionFactory connectionFactory() {  
          CachingConnectionFactory connectionFactory = new CachingConnectionFactory();  
          connectionFactory.setAddresses("172.16.101.14:5672");  
          connectionFactory.setUsername("admin");  
          connectionFactory.setPassword("admin"); 
          connectionFactory.setPublisherConfirms(true); 
          return connectionFactory;  
      }  
  
  
      @Bean  
      @Scope("prototype") 
      public RabbitTemplate rabbitTemplate() {  
          RabbitTemplate template = new RabbitTemplate(connectionFactory());  
          return template;  
      } 
  
  
      @Bean
      CustomExchange delayExchange() {
          Map&lt;String, Object&gt; args = new HashMap&lt;String, Object&gt;();
          args.put("x-delayed-type", "direct");
          return new CustomExchange("my-exchange", "x-delayed-message", true, false, args);
      }
  
      @Bean  
      public Queue queue() {  
          return new Queue("spring-boot-queue", true);   
  
      }  
  
      @Bean
      Binding binding(Queue queue, Exchange delayExchange) {
          return BindingBuilder.bind(queue).to(delayExchange).with("spring-boot-queue").noargs();
      }
  
      @Bean  
      public SimpleMessageListenerContainer messageContainer() {  
          SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());  
          container.setQueues(queue());  
          container.setExposeListenerChannel(true);  
          container.setMaxConcurrentConsumers(1);  
          container.setConcurrentConsumers(1);  
          container.setAcknowledgeMode(AcknowledgeMode.MANUAL); 
  
          container.setMessageListener(new ChannelAwareMessageListener() {  
  
              public void onMessage(Message message, Channel channel) throws Exception {  
                  byte[] body = message.getBody();  
                  System.err.println("receive msg : " + new String(body));  
                  channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); //确认消息成功消费  
  
              }  
          });  
  
          return container;  
      }  
  
  
  }
  
  @Component
  public class Send implements RabbitTemplate.ConfirmCallback{
  
      private RabbitTemplate rabbitTemplate;  
  
      @Autowired  
      public Send(RabbitTemplate rabbitTemplate) {  
          this.rabbitTemplate = rabbitTemplate; 
          this.rabbitTemplate.setConfirmCallback(this);
          rabbitTemplate.setMandatory(true);
      }  
  
      public void sendMsg(String content) {  
  
          CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString()); 
  
          rabbitTemplate.convertAndSend("my-exchange", "", content, new MessagePostProcessor() {
              @Override
              public Message postProcessMessage(Message message) throws AmqpException {
                  message.getMessageProperties().setHeader("x-delay", 6000);
                  return message;
              }
          },correlationId);
  
          System.err.println("delay message send ................");
  
      }
  
      /**  
       * 回调  
       */  
      @Override  
      public void confirm(CorrelationData correlationData, boolean ack, String cause) {  
  
          System.err.println(" callback id :" + correlationData);  
  
          if (ack) {  
              System.err.println("ok");  
          } else {  
              System.err.println("fail:" + cause);  
          }  
      }  
  }
  </code></pre>
  
  <p>Is there someone could give a help.</p>
  
  <p>Thanks all.</p>