freyo / laravel-queue-cmq
腾讯云CMQ SDK队列适配器
6.0.0
2021-06-04 06:32 UTC
Requires
- php: ^7.2
- ext-curl: *
- ext-json: *
- illuminate/queue: ^6.0|^7.0
Requires (Dev)
- php: ^7.2
- phpunit/phpunit: ^8.4
- vlucas/phpdotenv: ^3.3
README
Laravel Queue腾讯云消息队列驱动
安装
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(北京)。
-
公共网络API请求的域名:cmq-queue-region.api.qcloud.com / cmq-topic-region.api.qcloud.com
-
私有网络API请求的域名:cmq-queue-region.api.tencentyun.com / cmq-topic-region.api.tencentyun.com
使用方法
完成配置后,您可以使用 Laravel 队列 API。如果您使用了其他队列驱动程序,则无需更改其他内容。如果您不知道如何使用队列 API,请参阅官方 Laravel 文档:https://laravel.net.cn/docs/queues
示例
调度任务
默认连接名称为 cmq
//use queue only Job::dispatch()->onConnection('connection-name')->onQueue('queue-name'); // or dispatch((new Job())->onConnection('connection-name')->onQueue('queue-name')) //use topic and tag filter Job::dispatch()->onConnection('connection-name')->onQueue('tag1,tag2,tag3'); // or dispatch((new Job())->onConnection('connection-name')->onQueue('tag1,tag2,tag3')) //use topic and routing filter Job::dispatch()->onConnection('connection-name')->onQueue('routing-key'); // or 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 seconds 'retries' => 3, ], 'topic' => [ 'enable' => false, 'filter' => 'routing', // routing or 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; /** * Create a new job instance. * * @return void */ public function __construct($payload) { $this->payload = $payload; } /** * Get the plain payload of the job. * * @return string */ public function getPayload() { return $this->payload; } }
创建一个纯作业处理器
<?php namespace App\Jobs; use Illuminate\Queue\Jobs\Job; class CMQPlainJobHandler { /** * Execute the job. * * @param \Illuminate\Queue\Jobs\Job $job * @param string $payload * * @return void */ public function handle(Job $job, $payload) { // processing your payload... var_dump($payload); // release back to the queue manually when failed. // $job->release(); // delete message when processed. if (! $job->isDeletedOrReleased()) { $job->delete(); } } }
参考资料
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅许可文件。