代码之家  ›  专栏  ›  技术社区  ›  Ben Beri

AWS简单队列服务(SQS)可见性超时-设置最大重试次数?

  •  0
  • Ben Beri  · 技术社区  · 6 年前

    我们有一个使用amazon SQS的队列,其中包含消息。

    我们有多个工作者从该队列中读取数据,这些工作者是无状态的,这意味着他们无法记住每条消息的重试次数,除非我们使用重试次数更新消息。

    目前,如果工作进程无法处理消息,消息将在我们设置的X秒后返回队列,因为我们没有删除它,我们设置 VisisiblityTimeout 参数,这意味着如果消息未被工作者删除,则消息将在X set秒后返回队列。

    SQS队列或消息设置中是否有创建重试次数的选项,例如,如果消息返回队列的次数超过或等于3次,它将从队列中删除?

    public async pollMessage(queueName: string): Promise<QueueMessagePollResponse> {
    
        const parameters = {
            VisibilityTimeout: this.configService.queueVisibilityTimeoutSec,
            QueueUrl: this.buildQueueUrl(queueName),
        };
    
        return new Promise<QueueMessagePollResponse>((resolve, reject) => {
            this.sqs.receiveMessage(parameters, (error, data) => {
                if (error) {
                    this.logger.error(`Failed polling from queue with error: ${error.message}`);
                    reject(error);
                }
    
                if (!data.Messages) {
                    return resolve(null);
                }
    
                resolve({
                    messageDeletionId: data.Messages[0].ReceiptHandle,
                    data: data.Messages[0].Body,
                });
            });
        });
    
    }
    
    0 回复  |  直到 6 年前
        1
  •  4
  •   Asfar Irshad    6 年前

    您可以使用DLQ(死信队列)。设置SQS的重新驱动策略 你想尝试的次数,比如

    enter image description here

    更多细节 https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-dead-letter-queue.html