v3knet/queue-module

此包的最新版本(0.2.0)没有提供许可信息。

0.2.0 2015-09-27 22:52 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:58:57 UTC


README

使用此模块,我们可以将消息放入队列,并使用消费者处理消息。

1. 让模块知道您的队列

use atsilex\module\Module;
use atsilex\module\system\events\AppEvent;
use Pimple\Container;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Bernard\Message\DefaultMessage;

class MyModule extends Module {
    public function subscribe(Container $container, EventDispatcherInterface $dispatcher) {
        $dispatcher->addListener('queue.queues.get', function (AppEvent $event) {
            $queues = $event->getSubject();
            $queues['my_module.demo_queue'] = DefaultMessage::class;
        });
    }
}

然后您的队列将列在这里

php public/index.php v3k:queue:list

2. 生成消息

use atsilex\module\system\ModularAp;
use Bernard\Message\DefaultMessage;

$msg = new DefaultMessage('my_module.demo_queue, ['foo' => 'bar']);
$app['bernard.producer']->produce($msg);

3. 处理消息

我们需要教会消费者如何路由我们的消息

use atsilex\module\Module;
use atsilex\module\system\events\AppEvent;
use Bernard\Router\SimpleRouter;
use Bernard\Message\DefaultMessage;
use Pimple\Container;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;

class MyModule extends Module {
    public function subscribe(Container $container, EventDispatcherInterface $dispatcher) {
        // …
        $dispatcher->addListener('queue.router.create', function (AppEvent $event) {
            $router = $event->getSubject();
            $router->add('my_module.demo_queue', function (ImportMessage $m) use ($c) {
                // Logic to process the message
            });
        });
    }
}

现在消息可以被正确路由,接下来要处理消息,只需调用 consume 命令即可

php public/index.php v3k:queue:process my_module.demo_queue