composer require freyo/laravel-queue-cmq
Laravel версий 5.5+ используют автоматическое открытие пакетов, поэтому вам не требуется вручную добавлять ServiceProvider.
config/app.php
:'providers' => [
// ...
Freyo\LaravelQueueCMQ\LaravelQueueCMQServiceProvider::class,
]
.env
:QUEUE_DRIVER=cmq
CMQ_SECRET_KEY=
CMQ_SECRET_ID=
CMQ_QUEUE_HOST=https://cmq-queue-{region}.api.qcloud.com
CMQ_QUEUE=queue_name #default queue name
CMQ_QUEUE_POLLING_WAIT_SECONDS=0
CMQ_TOPIC_ENABLE=false # set to true to use topic
CMQ_TOPIC_FILTER=routing # or msgtag
CMQ_TOPIC_HOST=https://cmq-topic-{region}.api.qcloud.com
CMQ_TOPIC=topic_name
Регион следует заменить конкретным значением: gz (Гуанчжоу), sh (Шанхай) или bj (Пекин).
Домен для запросов через общую сеть: cmq-queue-region.api.qcloud.com / cmq-topic-region.api.qcloud.com
Домен для запросов через частную сеть: cmq-queue-region.api.tencentyun.com / cmq-topic-region.api.tencentyun.com
После завершения конфигурации вы можете использовать API очередей Laravel. Если вы использовали другие драйверы очередей, ничего менять не нужно. Если вы не знаете, как использовать API очередей, обратитесь к официальной документации Laravel: http://laravel.com/docs/queues
По умолчанию имя соединения — cmq
.
// использование только очереди
Job::dispatch()->onConnection('connection-name')->onQueue('queue-name');
// или dispatch((new Job())->onConnection('connection-name')->onQueue('queue-name'))
// использование темы и фильтра тэгов
Job::dispatch()->onConnection('connection-name')->onQueue('tag1,tag2,tag3');
// или dispatch((new Job())->onConnection('connection-name')->onQueue('tag1,tag2,tag3'))
// использование темы и фильтра маршрута
Job::dispatch()->onConnection('connection-name')->onQueue('routing-key');
// или dispatch((new Job())->onConnection('connection-name')->onQueue('routing-key'))
Настройте config/queue.php
'connections' => [
//...
'new-connection-name' => [
'driver' => 'cmq',
'secret_key' => 'your-secret-key',
'secret_id' => 'your-secret-id',
'queue' => 'your-queue-name',
'options' => [
'queue' => [
'host' => 'https://cmq-queue-region.api.qcloud.com',
'name' => 'your-queue-name',
'polling_wait_seconds' => 0, // 0-30 секунд
'retries' => 3,
],
'topic' => [
'enable' => false,
'filter' => 'routing', // routing или msgtag
'host' => 'https://cmq-topic-region.api.qcloud.com',
'name' => 'your-topic-name',
'retries' => 3,
],
],
'plain' => [
'enable' => false,
'job' => 'App\Jobs\CMQPlainJob@handle',
],
];
//...
];
php artisan queue:work {connection-name} --queue={queue-name}
Настройте .env
CMQ_PLAIN_ENABLE=true
CMQ_PLAIN_JOB=App\Jobs\CMQPlainJobHandler@handle
Создайте задачу, реализующую интерфейс PlainPayload
. Метод getPayload
должен возвращать строковое значение.
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Freyo\LaravelQueueCMQ\Queue\Contracts\PlainPayload;
class CMQPlainJob implements ShouldQueue, PlainPayload
{
use Dispatchable, InteractsWithQueue, Queueable;
protected $payload;
/**
* Создает новый экземпляр задачи.
*
* @return void
*/
public function __construct($payload)
{
$this->payload = $payload;
}
/**
* Получает простое содержимое задачи.
*
* @return string
*/
public function getPayload()
{
return $this->payload;
}
}
Создайте обработчик простой задачи
<?php
namespace App\Jobs;
use Illuminate\Queue\Jobs\Job;
class CMQPlainJobHandler
{
/**
* Выполняет задачу.
*
* @param \Illuminate\Queue\Jobs\Job $job
* @param string $payload
*
* @return void
*/
public function handle(Job $job, $payload)
{
// обрабатывает ваше содержимое...
var_dump($payload);
// возвращает задачу обратно в очередь при неудачной попытке.
// $job->release();
// удаляет сообщение после успешной обработки.
if (! $job->isDeletedOrReleased()) {
$job->delete();
}
}
}
Лицензия MIT. Для получения более подробной информации см. Файл лицензии.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )