swiftchase / queue-sqs-s3event
用于Amazon S3事件通知队列管理器SlmQueue的Zend Framework 2模块
Requires
- php: >=5.5
- slm/queue-sqs: ~0.4.0
This package is not auto-updated.
Last update: 2024-09-28 17:23:02 UTC
README
版本 0.1 由Marcus Welz创建。
目的
此模块允许处理由S3生成的SQS事件通知。
例如,您可能允许用户直接上传到S3存储桶,并且需要在处理之前知道新文件上传是否完成。
要求
- Zend Framework 2
- SlmQueue ~0.4.0
- SlmQueueSqs ~0.4.0
安装
将库添加到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可以被重构以允许配置特定队列将包含哪些类型的作业。默认情况下可以使用元数据来推断作业类型,另一种策略是指定包含的确切作业并将所有作业数据视为内容(没有元数据)。