Asynchronous processing for Symfony using Push Queues
Latest commit 3f98927 Sep 22, 2016 @kmfk kmfk committed on GitHub Merge pull request #111 from rycius100/fix/awsProvider-topicExists
Fix for topicExists function

QPush - Symfony2 Push Queue Bundle

Build Status Quality Score Code Coverage Total Downloads


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:


The bundle should be installed through composer.

Add the bundle to your composer.json file

    "require": {
        "uecode/qpush-bundle": "~2.2.0",

Update AppKernel.php of your Symfony Application

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

public function registerBundles()
    $bundles = array(
        // ...
        new Uecode\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.


            token:      YOUR_IRON_MQ_TOKEN_HERE
            project_id: YOUR_IRON_MQ_PROJECT_ID_HERE
            key:    YOUR_AWS_KEY_HERE
            secret: YOUR_AWS_SECRET_HERE
            region: YOUR_AWS_REGION_HERE
            provider: ironmq #or aws
                queue_name: my_queue_name #optional. the queue name used on the provider
                push_notifications: true
                    - { endpoint:, 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.

// src/My/Bundle/ExampleBundle/Controller/MyController.php

public function publishAction()
    $message = ['foo' => 'bar'];

    // fetch your provider service from the container

    // you can also fetch it directly

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.

        class: My\Bundle\ExampleBundle\Service\ExampleService
            - { name: uecode_qpush.event_listener, event: my_queue_key.message_received, method: onMessageReceived }
// src/My/Bundle/ExampleBundle/Service/ExampleService.php

use Uecode\Bundle\QPushBundle\Event\MessageEvent;

public function onMessageReceived(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.

// src/My/Bundle/ExampleBundle/Service/ExampleService.php

use Uecode\Bundle\QPushBundle\Event\MessageEvent;
use Uecode\Bundle\QPushBundle\Message\Message;

public function onMessageReceived(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.