Using Spring AMQP to post messages to RabbitMQ

The ActiveMQ jar’s come with the AMQP 1.0 protocol, which doesn’t work against a RabbitMQ AMQP version 0.9.1 broker. As such, we use a spring jar to get this to work, thanks to this link.

Very simple example of this.

Maven pom.xml file…


  4.0.0
  com.express.it.arch.poc.amqp
  amqppoc
  jar
  1.0-SNAPSHOT
  amqppoc
  http://maven.apache.org
  
    
      junit
      junit
      3.8.1
      test
    
    
      org.springframework.amqp
      spring-rabbit
      1.5.2.RELEASE
    
  

  
    
      
        
          org.apache.maven.plugins
          maven-assembly-plugin
          
            
              com.yourcompany.it.arch.poc.amqp.App
            
            
              jar-with-dependencies
            
          
        
      
    
  

Java class for test…

package com.express.it.arch.poc.amqp;

import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.core.*;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;

public class App {
  public static void main (String args[]) throws Exception {
	App a = new App();
    a.createExchange("foo");
    a.sendMessage("i came, i saw, i conquered");
    Thread.sleep(5000);
    a.receiveMessage();
  }
  private void createExchange(final String identifier) {
    final CachingConnectionFactory cf = new CachingConnectionFactory(5672);
    cf.setUsername("admin");
    cf.setPassword("admin");
    final RabbitAdmin admin = new RabbitAdmin(cf);
    final Queue queue = new Queue("myQueue", false);
    admin.declareQueue(queue);
    final TopicExchange exchange = new TopicExchange("myExchange");
    admin.declareExchange(exchange);
    admin.declareBinding(BindingBuilder.bind(queue).to(exchange).with("#"));
    cf.destroy();
  }

  private void deleteExchange() {
    final CachingConnectionFactory cf = new CachingConnectionFactory(5672);
    final RabbitAdmin admin = new RabbitAdmin(cf);
    admin.deleteExchange("myExchange");
    cf.destroy();
  }

  public void sendMessage(final String message) throws Exception {
    final CachingConnectionFactory cf = new CachingConnectionFactory(5672);
    cf.setUsername("admin");
    cf.setPassword("admin");
    final RabbitTemplate template = new RabbitTemplate(cf);
    template.convertAndSend("myExchange", "#", message);
    cf.destroy();
  }
  public void receiveMessage() throws Exception {
    final CachingConnectionFactory cf = new CachingConnectionFactory(5672);
    cf.setUsername("admin");
    cf.setPassword("admin");
    final RabbitTemplate template = new RabbitTemplate(cf);
    String s = (String)template.receiveAndConvert("myQueue");
    System.out.println("Message received = " + s);
    cf.destroy();
  }
}

Run build…

mvn clean compile assembly:single

Run test…

java -cp target\amqppoc-1.0-SNAPSHOT-jar-with-dependencies.jar com.express.it.arch.poc.amqp.App

You should see the message on the command line after five seconds. If you can GET the message in the RabbitMQ UI, available at http://localhost:15672/#/queues/myQueue, before the five seconds elapses, you should see the following…

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.