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:




