nsmithuk / dynamo-queue-php

v1.1.0 2018-03-07 14:08 UTC

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 的默认配置中,单个分区的情况下,作业按照它们被添加到队列的顺序进行处理。当使用多个分区时,作业处理的大致顺序与它们被添加的顺序相似。使用的分区数量越多,它们被添加和被处理的关联性越低。