fintem/mq-notification-bundle

Send/receive notifications using AMQP and Symfony event dispatcher

Installs: 5 497

Dependents: 0

Suggesters: 0

Security: 0

Stars: 2

Watchers: 3

Forks: 3

Open Issues: 0

Type:symfony-bundle

1.3.0 2018-07-18 06:56 UTC

This package is auto-updated.

Last update: 2024-04-17 17:13:46 UTC


README

Installation

Download the bundle and dependencies

$ composer require fintem/mq-notification-bundle

Enable the bundle by adding it to the list of registered bundles

<?php
// ...
        $bundles = [
            // ...
            new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(),
            new Fintem\MQNotificationBundle\MQNotificationBundle(),
        ];

// ...
}

Configuration

Add the old_sound_rabbit_mq section in your configuration file and describe connection. More info here.

MQNotificationBundle config:

mq_notification:
    mq_connection_name: default # connection name described under old_sound_rabbit_mq
    service_name: your_app_name # custom your application name

Usage

Dispatch event to push notification using symfony event-dispatcher

<?php

use Fintem\MQNotificationBundle\Event\NotifyEvent;

$notifyOnTerminate = false; // push notification on kernel/console terminate/exception
$event = new NotifyEvent('test_message', ['some' => 'data'], $notifyOnTerminate);
$this->dispatcher->dispatch(NotifyEvent::NAME, $event);

Run a consumer on service or application where you want to get notification

$ app/console rabbitmq:consumer notification

When a consumer receives notification, it dispatch two NotificationReceivedEvent events in order:

  • notification_received
  • notification_received.message_name e.g. notification_received.user_created
Create a listener/subscriber to listen those events
<?php

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Fintem\MQNotificationBundle\Event\NotificationReceivedEvent;

class NotificationSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            'notification_received' => ['onNotificationReceived', 0],
            'notification_received.user_created' => ['onUserCreated', 0],
        ];
    }
    
    public function onNotificationReceived(NotificationReceivedEvent $event)
    {
    }
    
    public function onUserCreated(NotificationReceivedEvent $event)
    {
        // $user = $event->getData();
    }
}
Register listener/subscriber in service container and tag them with the mq_notification.event_listener and mq_notification.event_subscriber tags