ActiveMQ obtenir tous les messages de la file d'attente

Je veux créer un outil qui sera capable de gérer les messages dans la file d'attente. Donc, je tiens à être en mesure d'obtenir tous les messages de la file d'attente(quelque chose comme à l'exportation) et de ne pas l'enlever de là.

J'ai essayé d'utiliser l'API JMX:

  ObjectName mbeanNameQueue = new ObjectName("org.apache.activemq:type=Broker,brokerName=static-broker1,destinationType=Queue,destinationName=tmp_queue2");
  org.apache.activemq.broker.jmx.QueueViewMBean queueView = JMX.newMBeanProxy(mbsc, mbeanNameQueue, org.apache.activemq.broker.jmx.QueueViewMBean.class);
  System.out.println(queueView.browseAsTable());

Mais je ne peux pas obtenir plus de 400 messages.

Aussi j'ai utilisé une telle approche:

  ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:55901");
  ActiveMQConnection connection = (ActiveMQConnection)connectionFactory.createConnection();
  DestinationSource ds = connection.getDestinationSource();

  QueueSession queueSession = connection.createQueueSession(true, Session.CLIENT_ACKNOWLEDGE);
  Queue queue = queueSession.createQueue("tmp_queue2");
  QueueBrowser browser = queueSession.createBrowser(queue);
  Enumeration<?> messagesInQueue = browser.getEnumeration();

  while (messagesInQueue.hasMoreElements()) {
      Message queueMessage = (Message) messagesInQueue.nextElement();
      System.out.println(queueMessage);
  }

mais messagesInQueue.hasMoreElements() renvoie toujours false malgré la file d'attente contient de nombreux messages.

Aussi, si j'essaie d'utiliser consommateur, il récupère tous les messages, mais il l'enlève de la file d'attente.

J'ai essayé d'exporter les messages de la file d'attente à l'aide outil de ligne de commande:

activemq browse --amqurl tcp://localhost:55901 tmp_queue2  >> messages22222.txt

Mais si la file d'attente contient environ 1000000 de messages qu'il jette

Failed to execute main task. Reason: java.lang.OutOfMemoryError: GC overhead limit exceeded

Alors, comment puis-je obtenir tous les messages de la file d'attente et de ne pas les supprimer à partir de là?

Lorsqu'aucune de remise des messages, peut-être que vous devriez commencer à la première connexion. Connexion d'appel.start() avant de réitérer les messages à partir du navigateur ou même la création de l'objet de navigateur. La spécification JMS dit que la connexion de démarrage est nécessaire avant de consommer les messages, pas un mot sur la façon dont la navigation devrait fonctionner, mais la navigation n'est pas si commun de l'activité, ActiveMQ l'a mis en oeuvre sans doute par lui-même.
merci, j'ai oublié de démarrer la connexion. Quand je l'ai commencé j'ai pu lire à propos de 5000 messages de la file d'attente, mais ensuite Il s'est arrêté pendant une longue période lors de l'extraction de l'élément suivant....

OriginalL'auteur evgeniy44 | 2013-11-27