RabbitMQ Module for Play! Framework
This new module allows you to consume and produce messages on a RabbitMQ instance from your Play! Framework application.
Installation
play install rabbitmq
Configuration
module.rabbitmq=${play.path}/modules/rabbitmq-0.0.1 rabbitmq.host=localhost rabbitmq.port=5672 rabbitmq.userName=guest rabbitmq.password=guest rabbitmq.vhost=/ rabbitmq.exchangeType=direct rabbitmq.durable=true rabbitmq.autoAck=false rabbitmq.basicQos=true
Define Message that will be used by the Queue (just a simple POJO)
public class SampleMessage implements Serializable { /** The field1. */ private String field1; /** The field2. */ private String field2; /** * Instantiates a new sample message. */ public SampleMessage() { } /** * Instantiates a new sample message. * * @param field1 the field1 * @param field2 the field2 */ public SampleMessage(String field1, String field2) { super(); this.field1 = field1; this.field2 = field2; } /** * Gets the field1. * * @return the field1 */ public String getField1() { return field1; } /** * Sets the field1. * * @param field1 the new field1 */ public void setField1(String field1) { this.field1 = field1; } /** * Gets the field2. * * @return the field2 */ public String getField2() { return field2; } /** * Sets the field2. * * @param field2 the new field2 */ public void setField2(String field2) { this.field2 = field2; } /** * To String * * @see java.lang.Object#toString() */ @Override public String toString() { return "SampleMessage [field1=" + field1 + ", field2=" + field2 + "]"; } }
Publish a Message
public static void publish(String q) { RabbitMQPublisher.publish("myQueue", new SampleMessage(q, q)); render(q); }
Creating a Message Consumer
@OnApplicationStart(async=true) public class RabbitMQSampleConsumer extends RabbitMQConsumer { /** * Consume Message * * @see play.modules.rabbitmq.consumer.RabbitMQConsumer#consume(T) */ @Override protected void consume(SampleMessage message) { System.out.println("******************************"); System.out.println("* Message Consumed: " + message); System.out.println("******************************"); } /** * Name of the Queue that this consumer will be listening to. * * @return the string * @see play.modules.rabbitmq.consumer.RabbitMQConsumer#queue() */ @Override protected String queue() { return "myQueue"; } /** * Return message type. * * @return the message type * @see play.modules.rabbitmq.consumer.RabbitMQConsumer#getMessageType() */ protected Class getMessageType() { return SampleMessage.class; } }
* Please note this is a Play! job so you can start it manualy or you can use the other annotations provided by Play! like @On or @Every. More information available at Asynchronous Jobs documentation.
Firehose – Another way to publish messages in batch
@OnApplicationStart(async = true) public class RabbitMQSampleFirehose extends RabbitMQFirehose { /** The count. */ public int count = 0; /** * Get data to be loaded. * * @param n the n * @return the data * @throws Exception the exception * @see play.modules.rabbitmq.producer.RabbitMQFirehose#getData(int) */ @Override protected List getData(int n) throws Exception { if ( count >= 10 ) { return null; } List results = new ArrayList(); for (int i = 0; i < n; i++) { results.add(new SampleMessage("field1", "field2")); count++; } return results; } /** * Batch Size - How many records we will select at the time?. * * @return the int * @see play.modules.rabbitmq.producer.RabbitMQFirehose#batchSize() */ @Override protected int batchSize() { return 2; } /** * Queue Name. * * @return the string * @see play.modules.rabbitmq.producer.RabbitMQFirehose#queueName() */ @Override protected String queueName() { return "myQueue"; } }
* Please note this is a Play! job so you can start it manualy or you can use the other annotations provided by Play! like @On or @Every. More information available at Asynchronous Jobs documentation. Of course the code is available on Github.
Now Go Play!
Reference : RabbitMQ Module for Play! Framework from our JCG partner Felipe Oliveira at Geeks Are Totally In.
Related Articles: