swiftchase/queue-sqs-s3event

用于Amazon S3事件通知队列管理器SlmQueue的Zend Framework 2模块

0.1.1 2015-04-05 23:53 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:23:02 UTC


README

版本 0.1 由Marcus Welz创建。

目的

此模块允许处理由S3生成的SQS事件通知

例如,您可能允许用户直接上传到S3存储桶,并且需要在处理之前知道新文件上传是否完成。

要求

安装

将库添加到composer

$ composer require "swiftchase/queue-sqs-s3event:*"

然后,在您的 config/application.config.php 中添加 S3EventQueue 模块。之后,S3EventQueue\Queue\S3EventQueueFactory 就可以管理包含S3事件通知的SQS队列。

请遵循 SlmQueueSqs 文档。

  • 队列管理器必须是新的 S3EventQueueFactory 而不是 SqsQueueFactory
  • 在队列配置部分,队列必须指定要实例化的作业类。
    'slm_queue' => [
        'queues' => [
            'bucket-name' => [
                'job_class' => 'My\Job\S3EventJob' // extends AbstractS3EventJob
            ]
        ],
        'queue_manager' => [
            'factories' => [
                'bucket-name' => 'S3EventQueue\Queue\S3EventQueueFactory'
            ]
        ]
    ]

它是如何工作的?

优秀的 SlmQueue 允许多个队列后端,以及每个队列的多个作业类型。这是通过持久化元数据(作业类)并在反序列化期间实例化正确的作业来实现的。这发生在 SlmQueue\Queue\AbstractQueue::unserializeJob

AWS生成的事件显然不遵循此格式,因此我们需要一种方法来覆盖要实例化的作业,因此需要自定义的 S3EventQueue,它配置为单个作业类型。

限制/待办事项

预计每个SQS消息只会有一个事件。如果情况不是这样,队列管理器将抛出异常。我没有找到表明多个事件可以聚合或这不是情况的文档。虽然抛出异常并不漂亮,但它通过遗漏事件防止了潜在的数据丢失。

而不是有这个自定义队列管理器,SlmQueue可以被重构以允许配置特定队列将包含哪些类型的作业。默认情况下可以使用元数据来推断作业类型,另一种策略是指定包含的确切作业并将所有作业数据视为内容(没有元数据)。