koma136/yii2-queue-async-chain

Async chain for Yii2 Queue

Installs: 1 278

Dependents: 0

Suggesters: 0

Security: 0

Stars: 8

Watchers: 2

Forks: 4

Open Issues: 0

Type:yii2-extension

v1.0.2 2019-05-29 16:40 UTC

This package is auto-updated.

Last update: 2024-04-26 03:47:38 UTC


README

Async chain for Yii2 Queue

Синхронные и асинхронные очереди Настройка

<?php
return [
   'components' => [
       'queue' => [
          'class' => \yii\queue\db\Queue::class,
           'mutex' => \yii\mutex\MysqlMutex::class, // Mutex used to sync queries
           'as chain' => [
               'class' => \koma136\queue\chain\ChainBehavior::class,
               'storage' => \koma136\queue\chain\db\DbStorage::class
           ],
           'as async' => [
               'class' => \koma136\queue\async_chain\AsyncChainBehavior::class,
               'storage' => \koma136\queue\async_chain\db\DbStorage::class,
           ],
       ],
   ],
];

Использование

Пример синхронного группового задания: спасибо https://github.com/zhuravljov

class MyGroupJob extends BaseObject implements JobInterface, ChainJobInterface
{
    /**
     * @return string уникальный идентификатор группы заданий.
     * @inheritdoc ChainJobInterface
     */
    public function getGroupId()
    {
        return 'group-123';
    }
    
    /**
     * @inheritdoc JobInterface
     */
    public function execute($queue)
    {
        //...
        return 12345;
    }
    
    /**
     * Финализация запустится один раз после того, как выполнятся все задания группы.
     * @inheritdoc ChainJobInterface
     */
    public function finalizeGroup($queue, array $results)
    {
        $queue->push(new MyFinalizeJob(['results' => $results]));
    }
}

Пример асинхронного группового задания

class TestChainJob extends AsyncChainBaseJob implements JobInterface,AsyncChainJobInterface
{
    /**
     * @var string
     */
    public $jobname;

    /**
     * @param \yii\queue\Queue $queue
     * @param array $results
     */
        public function finalizeGroup(ExecEvent $event)
        {
            echo "finish group ";
        }

    /**
     * @param \yii\queue\Queue $queue
     * @return mixed|void
     */
        public function execute($queue)
        {
            return $this->rezultPrevJob . '-test';
        }


}

запуск асинхронной цепочки задачь

 $jobs = [
                new TestChainJob(["jobname"=>'1']),
                new TestChainJob(["jobname"=>'2']),
                new TestChainJob(["jobname"=>'3']),
            ];
            
Yii::$app->queue->async($jobs);