Bootstrap FreeKB - RabbitMQ - Get a message on a queue in Java
RabbitMQ - Get a message on a queue in Java

Updated:   |  RabbitMQ articles

Create a Dynamic Web Project in Eclipse. Let's say the name of the project is rabbitmq. Download amqp-client-<version>.jar and javax.jms-api-<version>.jar and add the JAR files to your build path in Eclipse.

 

In the left panel of Eclipse, at the name of your project (rabbitmq in this example) > Java Resources > src, create a new package. For the sake of this tutorial, let's name the package com.rabbitmq.demo.

 

In the package, create a class called consumer.

 

In consumer.java, add the following markup. In this example, the messages on foo.queue will be consumed.

package com.rabbitmq.demo;

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;
import java.net.URISyntaxException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;

public class producer {
  public void amqConsumer() throws KeyManagementException, NoSuchAlgorithmException, URISyntaxException {		
    ConnectionFactory cf = new ConnectionFactory();

    // use amqp if the server is not using SSL (e.g. http)
    cf.setUri("amqp://john.doe:itsasecret@server1.example.com:5671/foo");

    // use amqps if the server is using SSL (e.g. https)
    cf.setUri("amqps://john.doe:itsasecret@server1.example.com:5671/foo");

    Connection conn = null;
    try {
      System.out.println("Trying to connect to " + conn);

      conn = cf.newConnection();

      if (conn != null) {    
        System.out.println("Successfully connected to " + conn);
      }
	  else {
	    System.out.println("Failed to connect to " + conn);   		  
	  }

      Channel channel = conn.createChannel();
	  DeliverCallback deliverCallback = (consumerTag, delivery) -> {
	    String message = new String(delivery.getBody(), "UTF-8");
	    System.out.println("Successfully consumed message '" + message + "' from foo.queue on " + conn);
	  };
      boolean autoAcknowledge = true;
	  channel.basicConsume("foo.queue", autoAcknowledge, deliverCallback, consumerTag -> { });
    } 
    catch (Exception e) {
      e.printStackTrace();
    }           
  }
}

 

In the left panel of Eclipse, right click on the name of your project (rabbitmq in this example) and select New JSP File. Select the WebContent folder, give the file a name such as index.jsp, and select Finish.

 

Add the following to line 1 of the JSP file. This is the combination of the package (com.rabbitmq.main) and the class (consumer.java).

<%@page import="com.rabbitmq.main.consumer"%>

 

Add the following inside the <body> tags.

  • In this example, "consumer" must be used because the name of the class in consumer.java is consumer.
  • In this example, "amqConsumer" must be used because the name of the method in consumer.java is amqConsumer.
<body>
<%
  consumer jms = new consumer();
  jms.amqConsumer();
%>
</body>

 

Select the green play button in Eclipse should consume the messages on foo.queue.

Likewise, the main RabbitMQ log file should have something like this.

accepting AMQP connection <0.7993.1338> (10.17.115.16:54343 -> 10.122.15.2:5672)

connection <0.7993.1338> (10.17.115.16:54343 -> 10.122.15.2:5672): user 'john.doe' authenticated and granted access to vhost 'foo'

closing AMQP connection <0.21250.1339> (10.17.115.16:54343 -> 10.122.15.2:5672, vhost: 'foo', user: 'john.doe')

 




Did you find this article helpful?

If so, consider buying me a coffee over at Buy Me A Coffee



Comments


Add a Comment


Please enter d177e0 in the box below so that we can be sure you are a human.