snapsuzun/yii2-sqs

Yii2 Amazon SQS 监视器扩展,用于处理来自 SQS 队列的消息

安装: 186

依赖者: 0

建议者: 0

安全: 0

星标: 2

关注者: 3

分支: 5

开放问题: 0

类型:yii2-extension

dev-master 2019-02-21 09:31 UTC

This package is auto-updated.

Last update: 2024-09-21 21:58:19 UTC


README

一个用于接收和处理 Amazon SQS 消息的扩展。

安装

安装此扩展的首选方式是通过 composer

运行以下命令:

php composer.phar require --prefer-dist snapsuzun/yii2-sqs

或者在您的 composer.json 文件的 require 部分添加:

"snapsuzun/yii2-sqs": "dev-master"

配置

要使用此扩展,只需在您的应用程序配置中添加以下代码

return [
    'bootstrap' => ['sqsWatcher']
    //....
    'components' => [
        'sqsClient' => function () {
            return new \snapsuzun\sqs\SqsClient([
                'cridentials => [
                    'key' => 'Api key of Amazon AWS',
                    'secret' => 'Secret key of Amazon AWS'
                ],
                'region' => 'Region of Amazon SQS',
                'version' => 'latest',
                'accountId' => 'ID of account in Amazon AWS',
                'queueNameAliases' => [
                    'aliasForQueue' => 'Real name of queue in Amazon SQS',
                    'test_queue' => 'TestQueue.fifo'
                ]
            ]);
        },
        'sqsWatcher' => [
            'class' => '\snapsuzun\sqs\watcher\Watcher',
            'queueName' => 'queue',
            'handler' => function (array $messages, array &$receiptHandlers, \snapsuzun\sqs\SqsClient $client) {
                // handle messages                
            }
        ],
    ],
];

消息处理器

从 SQS 队列处理消息可以通过回调函数或实现 \snapsuzun\sqs\watcher\HandlerInterface 的对象来完成。

实现 \snapsuzun\sqs\watcher\HandlerInterface 的对象示例

class ExampleHandler implements \snapsuzun\sqs\watcher\HandlerInterface 
{
        public $db = 'db';
   
        /**
         * @param array $messages
         * @param array $receiptHandlers
         * @param \snapsuzun\sqs\SqsClient $client
         */
        public function handleMessages(array $messages, array &$receiptHandlers, \snapsuzun\sqs\SqsClient $client)
        {
            // handle messages
        }
}

使用 ExampleHandler

return [
    //.......
    'components' => [
        'sqsWatcher' => [
            //.....
            'handler' => ExampleHandler::class
        ]
    ]
];

或者

return [
    //.......
    'components' => [
        'sqsWatcher' => [
            //.....
            'handler' => [
                'class' => ExampleHandler::class,
                'db' => 'db2'
            ]
        ]
    ]
];

在处理消息时,您可以从中移除 receipt 处理器 $receiptHandlers,这样消息就不会从 SQS 队列中删除。

控制台命令

要监听队列,可以使用以下命令:

./yii sqs-watcher/listen --isolate=1

如果您只想处理队列中的消息而不想等待新消息,可以使用以下命令:

./yii sqs-watcher/run --isolate=1

选项 isolate 可以为每批消息创建一个子进程。