title: How to Give manual Acknowledge using JmsTemplate and delete message from Rabbitmq queue
body: <p>I am using RabbitMq(with JMS) with jmsTemplate I am able to Consume Message from RabbitMq Queue But it is taking acknowledgment AUTO.</p>
  
  <p>I have Search API for it but not able to find it out.</p>
  
  <p>How can I set manual acknowledgment.</p>
  
  <p>In Below code when Message is consumed from queue I want to call web service with that message and depends on that response from from I want to delete that message from queue.
  I have created one project in which I am using Listener and other project with call to read message from queue</p>
  
  <p>first Project:</p>
  
  <pre><code>package com.es.jms.listener;
  
  import javax.jms.ConnectionFactory;
  import javax.jms.JMSException;
  import javax.jms.Message;
  import javax.jms.MessageListener;
  import javax.jms.TextMessage;
  
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.jms.listener.MessageListenerContainer;
  import org.springframework.jms.listener.SimpleMessageListenerContainer;
  
  import com.rabbitmq.jms.admin.RMQConnectionFactory;
  
  @Configuration
  public class RabbitMqMessageListener {
  
      @Bean
      public ConnectionFactory jmsConnectionFactory() {
          RMQConnectionFactory connectionFactory = new RMQConnectionFactory();
          connectionFactory.setUsername("Username");
          connectionFactory.setPassword("Password");
          connectionFactory.setVirtualHost("vhostname");
          connectionFactory.setHost("hostname");
  
          return connectionFactory;
      }
  
      @Bean
      public MessageListener msgListener() {
          return new MessageListener() {
              public void onMessage(Message message) {
  
                  System.out.println(message.toString());
                  if (message instanceof TextMessage) {
                      try {
                          String msg = ((TextMessage) message).getText();
                          System.out.println("Received message: " + msg);
  
                          // call web service here and depends on web service
                          // response
                          // if 200 then delete msg from queue else keep msg in
                          // queue
  
                      } catch (JMSException ex) {
                          throw new RuntimeException(ex);
                      }
                  }
  
              }
          };
      }
  
      @Bean
      public MessageListenerContainer messageListenerContainer() {
          SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
          container.setConnectionFactory(jmsConnectionFactory());
          container.setDestinationName("test");
  
          container.setMessageListener(msgListener());
          return container;
  
      }
  }
  </code></pre>
  
  <p>2nd Project:</p>
  
  <pre><code>package com.rabbitmq.jms.consumer.controller;
  
  import java.util.concurrent.ExecutionException;
  import java.util.concurrent.TimeoutException;
  
  import javax.jms.ConnectionFactory;
  
  import org.json.JSONException;
  import org.json.JSONObject;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.context.annotation.Bean;
  import org.springframework.http.HttpStatus;
  import org.springframework.http.ResponseEntity;
  import org.springframework.jms.JmsException;
  import org.springframework.jms.core.JmsTemplate;
  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.CrossOrigin;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.bind.annotation.ResponseBody;
  
  
  import com.rabbitmq.jms.admin.RMQConnectionFactory;
  
  import redis.clients.jedis.Jedis;
  
  @Controller
  public class ReceiverController {
      @Autowired
      JmsTemplate jmsTemplate;
  
  
      @Bean
      public ConnectionFactory jmsConnectionFactory() {
          RMQConnectionFactory connectionFactory = new RMQConnectionFactory();
          connectionFactory.setUsername("Username");
          connectionFactory.setPassword("Password");
          connectionFactory.setVirtualHost("vhostname");
          connectionFactory.setHost("hostname");
  
          return connectionFactory;
      }
  
      @CrossOrigin
      @SuppressWarnings({ "unchecked", "rawtypes" })
      @RequestMapping(method = RequestMethod.GET, value = "/getdata")
      @ResponseBody
      public ResponseEntity&lt;String&gt; fecthDataFromRedis()
              throws JSONException, InterruptedException, JmsException, ExecutionException, TimeoutException {
          System.out.println("in controller");
  
          jmsTemplate.setReceiveTimeout(500L);
          // jmsTemplate.
          String message = (String) jmsTemplate.receiveAndConvert("test");
  
                      // call web service here and depends on web service
                      // response
                      // if 200 then delete msg from queue else keep msg in
                      // queue
          System.out.println(message);
  
          }
  
          return new ResponseEntity(message , HttpStatus.OK);
  
      }
  
  }
  </code></pre>
  
  <p>How Can I do That?</p>
  
  <p>Thanks In Advance.</p>