w7 / rangine-mq-cmq
腾讯云CMQ SDK队列适配器
v7.0.2
2022-04-06 02:22 UTC
Requires
- ext-curl: *
- ext-json: *
- w7/rangine-mq: ^3.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-06 13:57:49 UTC
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 Queue API。如果您使用了其他队列驱动器,则不需要更改其他内容。如果您不知道如何使用Queue 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)。有关更多信息,请参阅许可证文件。