desarrolla2/async-event-dispatcher-bundle

0.0.1 2019-09-27 08:12 UTC

This package is auto-updated.

Last update: 2024-09-21 16:59:02 UTC


README

AsyncEventDispatcherBundle 代表在 Symfony 中实现异步消息管理的简单方式!

安装

下载 Bundle

打开命令行控制台,进入您的项目目录,然后执行以下命令以下载此 bundle 的最新稳定版本

$ composer require desarrolla2/async-event-dispatcher-bundle

此命令要求您已全局安装 Composer,如 Composer 文档中的 安装章节 所述。

启用 Bundle

然后,通过在您的项目中的 app/AppKernel.php 文件中添加以下行来启用此 bundle

// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // ...

            new Desarrolla2\AsyncEventDispatcherBundle\AsyncEventDispatcherBundle(),
        );

        // ...
    }

    // ...
}

配置 Bundle

您需要在您的 config.yml 中添加类似以下内容

async_event_dispatcher:
  num_messages_per_execution: 1
  maximum_num_of_consumers: 4

创建您的第一个异步消息

一个创建示例消息的控制器的样子如下

<?php

namespace CoreBundle\Controller;

use CoreBundle\EventDispatcher\AsyncEvents;
use Desarrolla2\AsyncEventDispatcherBundle\Event\Event;

class MessageController extends AbstractController
{
    public function createAction()
    {
        $manager = $this->container->get('desarrolla2.async_event_dispatcher');
        $manager->dispatch(
            AsyncEvents::NAME_EVENT,
            new Event(['date' => (new \DateTime())->format('Ymd')])
        );
    }
}

消费我们消息的类的样子如下

<?php

namespace CoreBundle\EventSubscriber;

use CoreBundle\EventDispatcher\AsyncEvents;
use Desarrolla2\AsyncEventDispatcherBundle\Event\Event;

class ExampleSubscriber extends AbstractEventSubscriber
{
    public static function getSubscribedEvents()
    {
        return [
            AsyncEvents::NAME_EVENT => 'onUpdateRequested',
        ];
    }

    public function onUpdateRequested(Event $event)
    {
        /* CODE */
    }
}

消费我们消息的类的配置

services:
  _defaults: { public: true }

  core.event_subscriber.example_subscriber:
    class: 'CoreBundle\EventSubscriber\ExampleSubscriber'
    arguments:
      - '@service_container'
    tags:
      - { name: 'kernel.event_subscriber' }