Aliyun MNS for Laravel/Lumen
This is a queue drive for Laravel/Lumen base on Aliyun MNS SDK
Composer is recommended for installation:
$ composer require calchen/laravel-queue-aliyun-mns:^2.0
For Laravel 5.5+ package auto discovery feature will help you loading everything you need
Open your bootstrap/app.php
and add this line
$app->register(Calchen\LaravelQueueAliyunMns\AliyunMnsServiceProvider::class);
Copy configuration file from vendor/laravel/lumen-framework/queue.php
to config/queue.php
Open your config/queue.php
and add these lines in connections
section
'mns' => [
'driver' => 'mns',
'access_key_id' => env('ALIYUN_ACCESS_KEY_ID'),
'access_key_secret' => env('ALIYUN_ACCESS_KEY_SECRET'),
'endpoint' => env('ALIYUN_MNS_ENDPOINT'),
'queue' => env('ALIYUN_MNS_QUEUE'),
],
If you want to use MNS by default, set QUEUE_CONNECTION=mns
in .env
key | required | remarks |
---|---|---|
driver | Y | default:mns, Do not change! |
access_id | Y | See 'Security' |
access_key_secret | Y | See 'Security' |
endpoint | Y | See 'Endpoint' |
queue | Y | - |
wait_seconds | N | Polling waiting time, See ReceiveMessage |
Open Aliyun MNS console. Select the region where the queue is located. You will see endpoint if click the button 'Get Endpoint'
It's important to note that you can see endpoint may be such http(s)://1687399289328741.mns.cn-hangzhou.aliyuncs.com/
, but in fact can only use https://1687399289328741.mns.cn-hangzhou.aliyuncs.com/
or http://1687399289328741.mns.cn-hangzhou.aliyuncs.com/
For security you should use AccessKey ID and AccessKey Key Secret of RAM users, and should never use AccessKey ID and AccessKey Key Secret of cloud account
These MNS API is used by current project: GetQueueAttributes、SendMessage、ReceiveMessage、DeleteMessage、ChangeMessageVisibility。
According to MNS document and implement best security practices, grant minimum permissions to users as needed. Here is a example policy for a queue, named for laravel-queue-aliyun-mns, which created in HangZhou China (cn-hangzhou):
{
"Version": "1",
"Statement": [
{
"Action": "mns:GetQueueAttributes",
"Resource": [
"acs:mns:cn-hangzhou:*:/queues/laravel-queue-aliyun-mns"
],
"Effect": "Allow"
},
{
"Action": [
"mns:SendMessage",
"mns:ReceiveMessage",
"mns:DeleteMessage",
"mns:ChangeMessageVisibility"
],
"Resource": [
"acs:mns:cn-hangzhou:*:/queues/laravel-queue-aliyun-mns/messages"
],
"Effect": "Allow"
}
]
}