2016-07-11 21 views
1

Ich betrachte die RabbitMQ Hello World Beispiel in Java https://www.rabbitmq.com/tutorials/tutorial-one-java.htmlRabbitMQ Verbraucher, die nur eine Nachricht verbraucht, erkennt es und stoppt hören

Produzent:

 ConnectionFactory factory = new ConnectionFactory(); 
     factory.setHost(host); 
     factory.setPort(Integer.parseInt(port)); 
     Connection connection = factory.newConnection(); 
     Channel channel = connection.createChannel(); 

     channel.queueDeclare(queueName, false, false, false, null); 

     channel.basicPublish("", queueName, null, message.getBytes()); 
     System.out.println(" [x] Sent '" + message + "'"); 

     channel.close(); 
     connection.close(); 

Consumer:

 ConnectionFactory factory = new ConnectionFactory(); 
     factory.setHost(host); 
     factory.setPort(Integer.parseInt(port)); 
     Connection connection = factory.newConnection(); 
     Channel channel = connection.createChannel(); 

     channel.queueDeclare(queueName, false, false, false, null); 
     System.out.println(" [*] Waiting for messages."); 

     QueueingConsumer consumer = new QueueingConsumer(channel); 
     channel.basicConsume(queueName, true, consumer); 

     QueueingConsumer.Delivery delivery = consumer.nextDelivery(1000); 
     if (delivery != null) { 
      String message = new String(delivery.getBody()); 
      System.out.println(" [x] Received '" + message + "'"); 
     } else { 
      System.out.println(" [x] No messages received"); 
     } 

Gibt es eine Möglichkeit, meinen Verbraucher so zu schreiben, dass es empfängt nur Nachricht und hört auf zu hören?

+0

Halten Sie die "consumer.nextDelivery (1000)" in einer while-Schleife (Endlosschleife) und hält sie hören. – Sreekar

Antwort

2

Der Verbrauchercode wurde folgendermaßen geändert. Das hat für mich funktioniert.

 ConnectionFactory factory = new ConnectionFactory(); 
     factory.setHost(host); 
     factory.setPort(Integer.parseInt(port)); 
     Connection connection = factory.newConnection(); 
     Channel channel = connection.createChannel(); 

     channel.queueDeclare(queueName, false, false, false, null); 
     System.out.println(" [*] Waiting for messages."); 

     QueueingConsumer consumer = new QueueingConsumer(channel); 
     channel.basicConsume(queueName, true, consumer); 

     QueueingConsumer.Delivery delivery = consumer.nextDelivery(1000); 
     while (delivery != null) { 
      String message = new String(delivery.getBody()); 
      System.out.println(" [x] Received '" + message + "'"); 
      delivery = consumer.nextDelivery(1000); 
     } 
     channel.close(); 
     connection.close();