RabbitMQ - Get a message on a queue in Java

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

Add a Comment




We will never share your name or email with anyone. Enter your email if you would like to be notified when we respond to your comment.





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




Comments

Web design by yours truely - me, myself, and I   |   jeremy.canfield@freekb.net   |