chenzi/laravel-mns-driver

阿里云 MNS 队列驱动 For Laravel

dev-master / 1.0.x-dev 2017-05-23 10:27 UTC

This package is not auto-updated.

Last update: 2024-09-23 16:24:43 UTC


README

Latest Version on Packagist Software License Total Downloads

安装

通过 Composer

$ composer require chenzi/laravel-mns-driver

配置

将以下服务提供者添加到 config/app.php 文件中的 providers 数组中

Chenzi\LaravelMNS\LaravelMNSServiceProvider::class

编辑你的 config/queue.php,添加 mns 连接

'mns'        => [
    'sms'=> [
        'driver'       => 'sms',
        'key'          => env('QUEUE_MNS_ACCESS_KEY'),
        'secret'       => env('QUEUE_MNS_SECRET_KEY'),
        'endpoint'     => env('QUEUE_MNS_ENDPOINT'),
        'queue'        => env('QUEUE_NAME'),
        'wait_seconds' => 30,
    ],
    'email'=> [
        'driver'       => 'email',
        'key'          => env('QUEUE_MNS_ACCESS_KEY'),
        'secret'       => env('QUEUE_MNS_SECRET_KEY'),
        'endpoint'     => env('QUEUE_MNS_ENDPOINT'),
        'queue'        => env('QUEUE_NAME'),
        'wait_seconds' => 30,
    ]
]

关于 wait_seconds

编辑你的 .env 文件

QUEUE_DRIVER=mns
QUEUE_NAME=foobar-local
QUEUE_MNS_ACCESS_KEY=your_acccess_key
QUEUE_MNS_SECRET_KEY=your_secret_key
QUEUE_MNS_ENDPOINT=http://12345678910.mns.cn-hangzhou.aliyuncs.com/

在生产模式下,你应该将 QUEUE_MNS_ENDPOINT 更新为 internal endpoint

用法

首先在 阿里云 MNS 控制台 创建一个队列并获取队列端点

然后更新 .env 中的 MNS_ENDPOINT

向队列推送测试消息

Queue::push(function($job){
	/**
	 * Your statments go here
	 */
	$job->delete();
});

你也可以自定义请求数据格式,将 mns 队列与其他程序一起使用

return json_encode( [
    'displayName' => 'App\Jobs\SendSms',
    'job'         => 'App\Jobs\SendSms',
    'maxTries'    => null,
    'timeout'     => null,
    'data'        => [],
] );

创建队列工作,在终端中运行命令

$ php artisan queue:mns:work sms

命令

在阿里云上刷新 MNS 消息

$ php artisan queue:mns:flush

作业处理

class SendSms implements ShouldQueue
{
    ...
    
    public function handle(ReceiveMessageResponse $job){
        $messageId = $job->getMessageId();
        $messageBody = $job->getMessageBody();
        
        //TODO do some thing...
    }
    
    ...
}   

安全

阿里云 RAM 控制台 创建 RAM 访问控制

  1. 创建一个自定义策略,例如 AliyunMNSFullAccessFoobar

    {
      "Version": "1",
      "Statement": [
    	{
    	  "Action": "mns:*",
    	  "Resource": [
    		"acs:mns:*:*:*/foobar-local",
    		"acs:mns:*:*:*/foobar-sandbox",
    		"acs:mns:*:*:*/foobar-production"
    	  ],
    	  "Effect": "Allow"
    	}
      ]
    }
    
  2. 为你的应用程序创建一个用户,例如 foobar

  3. 将策略 AliyunMNSFullAccessFoobar 分配给用户 foobar

  4. 为用户 foorbar 创建并获取 AccessKeyIdAccessKeySecret

  5. .env 中更新 QUEUE_MNS_ACCESS_KEYQUEUE_MNS_ACCESS_SECRET

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

测试

$ composer test

贡献

请参阅 CONTRIBUTINGCONDUCT 了解详细信息。

致谢

许可

MIT 许可证 (MIT)。请参阅 许可文件 了解更多信息。