nsmithuk / dynamo-queue-php
Requires
- php: >=5.5
- ext-pcntl: *
- aws/aws-sdk-php: ^3.2
- monolog/monolog: ~1.15.0
- psr/log: ~1.0
- wp-cli/php-cli-tools: 0.10.*
This package is not auto-updated.
Last update: 2024-09-24 16:09:34 UTC
README
概述
DynamoQueue 是一个由 DynamoDB 支持的队列库。PHP 版本提供了队列和工作组件。
DynamoQueue 特性
- 每个作业将被一个工作进程接收一次,并且只接收一次。
- 可以通过作业 ID 跟踪队列中作业的状态。
- 作业将以它们被添加的顺序处理 (*请参阅作业处理顺序*)。
- 享有亚马逊 DynamoDB 的所有可扩展性优势。
- 作业大小最多可达 400 KB (请参阅消息)。
安装
最简单的方法是将以下内容添加到 composer.json
{ "require": { "nsmithuk/dynamo-queue-php": "^1.0" } }
然后运行
php composer.phar install
初始设置
首先需要做的是在 DynamoDB 中创建一个合适的表。这可以通过 DynamoQueue 工作进程客户端直接完成。
bin/dynamo-queue --key <key> --secret <secret> --region <region> --table <name> --create
其中
- key 是您的 AWS 访问密钥
- secret 是您的 AWS 访问密钥
- region 是您希望表所在的 AWS 区域。例如:eu-west-1, us-east-1 等。
- table 是要创建的表名
或者,您可以在此处指定密钥和密钥,它们也可以作为环境变量指定,或者通过 IAM 角色为 Amazon EC2 实例设置。 更多详情请点击此处.
支持的完整区域列表可以在此处找到: http://docs.aws.amazon.com/general/latest/gr/rande.html#ddb_region
注意 - 此命令只为表和全局二级索引各提供 1 个读单位和 1 个写单位。这对于测试来说是可以的,但应该在生产中更改为一个更合适的值。
启动工作进程
一旦创建了一个表,就可以使用以下命令启动一个工作进程
bin/dynamo-queue --key <key> --secret <secret> --region <region> --table <name>
其中
- key 是您的 AWS 访问密钥
- secret 是您的 AWS 访问密钥
- region 是您创建表所在的 AWS 区域。
- table 是您创建的表名
或者,您可以在此处指定密钥和密钥,它们也可以作为环境变量指定,或者通过 IAM 角色为 Amazon EC2 实例设置。 更多详情请点击此处.
将作业添加到队列
假设您已通过 Composer 安装了 DynamoQueue,DynamoQueue 客户端将通过自动加载器可用。
// First create an instance of the DynamoDbClient from Amazon’s SDK $dynamoDb = new \Aws\DynamoDb\DynamoDbClient([ 'version' => '2012-08-10', 'region' => '<region>', 'credentials' => [ 'key' => '<key>', 'secret' => '<secret>', ] ]); // Create an instance of the DynamoQueue client $queue = new \DynamoQueue\Queue\Client( $dynamoDb, [ 'table_name' => '<table name>' ] );
然后您可以使用以下方法将作业添加到队列
$queue->enqueue( $processor, $message )
其中
- processor 是工作进程将用于执行作业的处理器。在 PHP 中,默认情况下,这应该是实现
ProcessorInterface
的类的完整类名(包括命名空间),该类可以通过工作进程中的自动加载器访问。 - message 是一个字符串,其中包含要传递给工作进程的消息/指令。对于富数据,我们建议这是一个 JSON 字符串。还支持二进制数据,如果您希望压缩和/或加密数据。
例如
$jobId = $queue->enqueue( 'DynamoQueueTests\Processors\EchoMessage', "Test Message" );
或者,如果您希望,您可以指定自己的唯一 jobId
$queue->enqueue( 'DynamoQueueTests\Processors\EchoMessage', "Test Message", "id-1" );
消息
根据 DynamoDB 限制,每个单独的作业(包括所有元数据)不能超过 400 KB。
然而,由于 AWS 基本上按每 KB 收费写入,因此强烈建议您使消息尽可能小;理想情况下小于 1 KB。
这可以通过以下方式实现:
- 在将消息添加到队列之前压缩消息;或者
- 将主要消息存储在其他地方 - 例如 S3 或数据库 - 然后只需通过队列传递消息的引用。
作业处理顺序
为了辅助可伸缩性,DynamoQueue 支持跨分区分配作业。在 DynamoQueue 的默认配置中,单个分区的情况下,作业按照它们被添加到队列的顺序进行处理。当使用多个分区时,作业处理的大致顺序与它们被添加的顺序相似。使用的分区数量越多,它们被添加和被处理的关联性越低。