title: How to kill consumers in activemq
body: <p>I am trying to get rid of all of the "Number of Consumers" in a certain queue.  Whenever I purge/delete the queue, the number of consumers still remain if I ever create that queue with the same name again.  Even with 0 pending messages, there are still 6 consumers.</p>
  
  <p>My problem may have stemmed in my java code while not closing the session or connection.</p>
  
  <p>I have tried both restarting and reinstalling the server.</p>
  
  <p>Here is my producer code:</p>
  
  <pre><code> private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
  
      public static String addElementToQueue(String queueName,String param1, String param2) throws JMSException, NamingException {
    // Getting JMS connection from the server and starting it
          ConnectionFactory connectionFactory =
                  new ActiveMQConnectionFactory(url);
          Connection connection = connectionFactory.createConnection();
  
  // JMS messages are sent and received using a Session. We will
          // create here a non-transactional session object. If you want
          // to use transactions you should set the first parameter to 'true'
          Session session = connection.createSession(false,
                  Session.AUTO_ACKNOWLEDGE);
  
          // Destination represents here our queue on the
          // JMS server. You don't have to do anything special on the
          // server to create it, it will be created automatically.
          Destination destination = session.createQueue(queueName);
  
          // MessageProducer is used for sending messages (as opposed
          // to MessageConsumer which is used for receiving them)
          MessageProducer producer = session.createProducer(destination);   
  
          String queueMessage = param1+ "-" + param2;
  
          TextMessage message = session.createTextMessage(queueMessage);
  
          // Here we are sending the message!
          producer.send(message);
  
          connection.close();
          session.close();      // added after problem came up
          producer.close();     // added after problem came up
  
          return commandID;
  }
  </code></pre>
  
  <p>Here is my consumer code:</p>
  
  <pre><code> // URL of the JMS server
      private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
  
      public static Pair consumeNextElement(String queueName) throws JMSException {
          // Getting JMS connection from the server
          ConnectionFactory connectionFactory
                  = new ActiveMQConnectionFactory(url);
          Connection connection = connectionFactory.createConnection();
          connection.start();   
  
          // Creating session for seding messages
          Session session = connection.createSession(false,
                  Session.AUTO_ACKNOWLEDGE);
  
          // Getting the queue
          Destination destination = session.createQueue(queueName);
  
          // MessageConsumer is used for receiving (consuming) messages
          MessageConsumer consumer = session.createConsumer(destination);
  
  
          // Here we receive the message.
          // By default this call is blocking, which means it will wait
          // for a message to arrive on the queue.
          Message message = consumer.receive();
  
          // There are many types of Message and TextMessage
          // is just one of them. Producer sent us a TextMessage
          // so we must cast to it to get access to its .getText()
          // method.
  
          String[] parts = ((TextMessage)message).getText().split("-");
          Pair retVal = new Pair(parts[0], parts[1]);
  
          connection.close();
          session.close();        // added after problem came up
          consumer.close();      // added after problem came up  
  
          return retVal;
      }
  </code></pre>
  
  <p>Any thoughts?</p>
  
  <p>Thanks.</p>