在这个例子中,我们将创建一个死信队列,一个标准队列,并将它们与亚马逊简单队列服务(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');
现在,死信红利策略看起来像下面这样。