使用PHP AWS SDK在Symfony应用程序中创建死信队列

150 阅读1分钟

在这个例子中,我们将创建一个死信队列,一个标准队列,并将它们与亚马逊简单队列服务(AWS SQS)联系在一起。我们这样做的原因是,如果标准队列中的消息在尝试了一定数量后没有被处理,那么它就会被移到死字队列中,在那里等待。

文件

parameters.yaml

确保下面的凭证属于一个拥有 "AmazonSSQSFullAccess "权限的AWS IAM用户。

parameters:

services.yaml

services:

AwsSqsUtil

declare(strict_types=1);
  • **VisibilityTimeout。**当消费者从队列中收到消息,但尚未从队列中删除时,该消息被认为是 "飞行 "模式。在给定的可见性超时期后,消息对消费者可见,并再次被接收。例如,VisibilityTimeout => 60 ,使消息(收到但由于某种原因没有删除)在 "飞行 "模式下保持60秒,并使其再次 "可用"。注意。如果消息处理时间超过60秒,你的消息将被放回队列,并将再次被重新处理,这是我们不希望发生的。

  • **RedrivePolicy::maxReceiveCount。**一个消息在被移到死信队列之前可以被消费者接收的次数。例如,maxReceiveCount: 5 ,允许消费者最多接收5次信息。如果它仍然没有被成功处理并且没有被删除,那么它将被移到相关的死信队列中。

使用方法

这就是我们最终要做的事情。

创建一个死信队列

AwsSqsUtil::createQueue('image_resize', true);


获取死信队列ARN

AwsSqsUtil::getQueueArn('https://sqs.eu-west-1.amazonaws.com/000000000000/APP_DEV_image_resize_DL');

创建一个标准队列

AwsSqsUtil::createQueue('image_resize', false, 'arn:aws:sqs:eu-west-1:000000000000:APP_DEV_image_resize_DL');


现在,死信红利策略看起来像下面这样。