1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/freyo-laravel-queue-cmq

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 03.03.2025 00:35 e98e952

Драйвер очередей Tencent Cloud Message Queue для Laravel Queue

Статус FOSSA

Установка

composer require freyo/laravel-queue-cmq

Настройка

Laravel версий 5.5+ используют автоматическое открытие пакетов, поэтому вам не требуется вручную добавлять ServiceProvider.

  1. config/app.php:
'providers' => [
  // ...
  Freyo\LaravelQueueCMQ\LaravelQueueCMQServiceProvider::class,
]
  1. .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. Для получения более подробной информации см. Файл лицензии.

FOSSA Status

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/freyo-laravel-queue-cmq.git
git@api.gitlife.ru:oschina-mirror/freyo-laravel-queue-cmq.git
oschina-mirror
freyo-laravel-queue-cmq
freyo-laravel-queue-cmq
master