Skip to content

Repository files navigation

QPush - Symfony2 Push Queue Bundle

Build StatusQuality ScoreCode CoverageTotal Downloads

Overview

This bundle allows you to easily consume messages from Push Queues by simply tagging your services and relying on Symfony's event dispatcher - without needing to run a daemon or background process to continuously poll your queue.

Full Documentation:qpush-bundle.readthedocs.org

Installation

The bundle should be installed through composer.

composer require uecode/qpush-bundle

Update AppKernel.php of your Symfony Application

Add the UecodeQPushBundle to your kernel bootstrap sequence, in the $bundles array.

publicfunctionregisterBundles()
{
$bundles = array(
// ...newUecode\Bundle\QPushBundle\UecodeQPushBundle(),
);
return$bundles;
}

Basic Configuration:

Here is a basic configuration that would create a push queue called my_queue_name using AWS or IronMQ. You can read about the supported providers and provider options in the full documentation.

Example
#app/config.ymluecode_qpush:
providers:
ironmq:
token: YOUR_IRON_MQ_TOKEN_HEREproject_id: YOUR_IRON_MQ_PROJECT_ID_HEREaws:
key: YOUR_AWS_KEY_HEREsecret: YOUR_AWS_SECRET_HEREregion: YOUR_AWS_REGION_HEREqueues:
my_queue_key:
provider: ironmq #or awsoptions:
queue_name: my_queue_name #optional. the queue name used on the providerpush_notifications: truesubscribers:
- { endpoint: http://example.com/qpush, protocol: http }

You may exclude aws key and secret to default to IAM role on the EC2 machine.

Publishing messages to your Queue

Publishing messages is simple - fetch the registered Provider service from the container and call the publish method on the respective queue.

This bundle stores your messages as a json object and the publish method expects an array, typically associative.

Example
// src/My/Bundle/ExampleBundle/Controller/MyController.phppublicfunctionpublishAction()
{
$message = ['foo' => 'bar'];
// fetch your provider service from the container$this->get('uecode_qpush')->get('my_queue_key')->publish($message);
// you can also fetch it directly$this->get('uecode_qpush.my_queue_key')->publish($message);
}

Working with messages from your Queue

When a message hits your application, this bundle will dispatch a MessageEvent which can be handled by your services. You need to tag your services to handle these events.

Example
services:
my_example_service:
class: My\Bundle\ExampleBundle\Service\ExampleServicetags:
- { name: uecode_qpush.event_listener, event: my_queue_key.message_received, method: onMessageReceived }
Example
// src/My/Bundle/ExampleBundle/Service/ExampleService.phpuseUecode\Bundle\QPushBundle\Event\MessageEvent;
publicfunctiononMessageReceived(MessageEvent$event)
{
$queue_name = $event->getQueueName();
$message = $event->getMessage();
// do some processing
}

The Message objects contain the provider specific message id, a message body, and a collection of provider specific metadata.

These properties are accessible through simple getters from the message object.

Example
// src/My/Bundle/ExampleBundle/Service/ExampleService.phpuseUecode\Bundle\QPushBundle\Event\MessageEvent;
useUecode\Bundle\QPushBundle\Message\Message;
publicfunctiononMessageReceived(MessageEvent$event)
{
$id = $event->getMessage()->getId();
$body = $event->getMessage()->getBody();
$metadata = $event->getMessage()->getMetadata();
// do some processing
}

Cleaning up the Queue

Once all other Event Listeners have been invoked on a MessageEvent, the Bundle will automatically attempt to remove the Message from your Queue for you.

About

Asynchronous processing for Symfony using Push Queues

Resources

Stars

167 stars

Watchers

9 watching

Forks

Releases

Packages

Used by

Contributors

Languages