PHP code example of alex-salt / yii2-tasks

1. Go to this page and download the library: Download alex-salt/yii2-tasks library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

alex-salt / yii2-tasks example snippets


return [
    'components' => [
        'rmq' => [
            'class' => \alexsalt\amqp\Connection::class,
            'host' => 'localhost',
        ],
        'tasks' => [
            'class' => \alexsalt\tasks\TaskQueueComponent::class,
            'rmq' => 'rmq',
            'defaultQueue' => 'tasks',
        ],
    ],
];

use alexsalt\tasks\TaskInterface;

class MyTask implements TaskInterface {
    public $a;

    public $b = 1;

    public function run() {
        // your magic code
    }
}

$task = new MyTask([ 'a' => 1, 'b' => 5 ]);
Yii::$app->tasks->send($task);

use alexsalt\tasks\TaskWorker;

class WorkerController extends \yii\console\Controller {
    public function actionMyTask() {
        $worker = new TaskWorker([
            'queue' => 'tasks',
        ]);
        $worker->start();
    }
}

use alexsalt\tasks\BaseMessage;
use alexsalt\tasks\AbstractWorker;

// declare message class with structure
class MyMessage extends BaseMessage {
    public $a;

    public $b;
}

// declare worker with our handler
class MyWorker extends AbstractWorker {
    /**
     * @param MyMessage $msg
     */
    public function processMessage(BaseMessage $msg) {
        if ($msg->a - $msg->b) {
            return $this->ack($msg);
        } else if (!$msg->b) {
            Yii::error('dont like the message');
            return $this->drop($msg);
        } else {
            return $this->nack($msg);
        }
    }
}

// create and send message
$msg = new MyMessage([ 'a' => 1 ]);
Yii::$app->rmq->sendToQueue($msg, 'my-queue');

// start worker that does stuff
$worker = new MyWorker([ 'queue' => 'my-queue' ]);
$worker->start();