Consumer Code Example

This code connects to the UH Message Broker and consumes the messages described in UHIMS Events

  1. Download the RabbitMQ Java client from http://www.rabbitmq.com/download.html (there should be libraries and examples for other languages there)
  2. Here is a SampleUhimsConsumer.java you can try.
    • Replace the following with your own values:
      • yourRabbitMqUsernameHere
      • yourRabbitMqPasswordHere
      • yourQueueNameHere
      • esb-test.its.hawaii.edu with esb.hawaii.edu when your code is ready to use the production RabbitMQ service.

        import java.io.*;
        import java.security.*;
        import com.rabbitmq.client.*;
        
        public class SampleUhimsConsumer {
        
            private final static  String queueName    = "yourQueueNameHere";
            private final static boolean durable       = true;
            private final static boolean exclusive     = true;
            private final static boolean autoDelete    = false;
            private final static boolean autoAck       = false;     // we will ack each message ourselves
            private final static    long timeout       = 2*60*1000; // to exit after 2 minutes without messages
        
         public static void main(String[] argv) throws Exception {
        
            ConnectionFactory factory = new ConnectionFactory();
        
            factory.setHost("esb-test.its.hawaii.edu");
            factory.setPort(5671);
            factory.setVirtualHost("uhims");
            factory.setUsername("yourRabbitMqUsernameHere");
            factory.setPassword("yourRabbitMqPasswordHere");
        
            factory.useSslProtocol(); // Tells the library to setup the default Key and Trust managers for you
                                      // which do not do any form of remote server trust verification
        
            Connection conn       = factory.newConnection();
            Channel    channel    = conn.createChannel();
            System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
            QueueingConsumer consumer = new QueueingConsumer(channel);
            channel.basicConsume(queueName, autoAck, consumer);
        
            while (true) {
              QueueingConsumer.Delivery delivery = consumer.nextDelivery(timeout);
              if (delivery == null) {
                // stop consumer if no events arrive after timeout milliseconds
                conn.close();
              }
              else {
                // Your code processes the message here
                String message = new String(delivery.getBody());
                System.out.println(" [x] Received '" + message + "'");
        
                // If your code fails to acknowledge the message,
                // it will be redelivered.  This is a safety feature.
                // Refer to Message Acknowledgement section in
                // http://www.rabbitmq.com/tutorials/tutorial-two-java.html
        
                channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
              }
            }
          }
        }
        
  3. To quickly compile and run the above, you could save the above code as SampleUhimsConsumer.java in the same directory where you downloaded the above Java client (we tried it with rabbitmq-java-client-bin-2.7.1):
    • javac -cp rabbitmq-client.jar SampleUhimsConsumer.java
    • java -cp .:commons-io-1.2.jar:commons-cli-1.1.jar:rabbitmq-client.jar SampleUhimsConsumer
  4. That's it!

(info) See Download page for more complete code examples.
(info) Javadoc at http://www.rabbitmq.com/javadoc/