【问题标题】:Receiving SQS Messages Very Slowly接收 SQS 消息非常慢
【发布时间】:2022-07-19 03:16:39
【问题描述】:

我正在尝试使用 Lambda 进行并行处理。我几乎同时调用了大约 150 个 Lambda 函数。这些 Lambda 中的每一个都将它们的状态发送到相同的标准 SQS 队列。每个都发送 10 条状态消息(即 10、20、30、...、100 条),因此总共只有大约 1,500 条消息。我使用这些状态的平均值来向用户显示整体状态。

我看到所有 Lambda 都在大约 10 秒内完成工作的证据,但许多消息需要几分钟才能到达,因此即使工作完成,用户仍在等待。

消息的接收者是一个 PHP 脚本,这里是 receiveMessage 代码:

while (!$done) {
    try {
        $result = $sqsClient->receiveMessage(array(
            'AttributeNames' => ['SentTimestamp'],
            'MaxNumberOfMessages' => 10,
            'WaitTimeSeconds' => 5,
            'MessageAttributeNames' => ['All'],
            'QueueUrl' => '<my queue>'
            ));

        foreach ($result->search('Messages[]') as $message) {
            ...

即使 WaitTimeSeconds 为 0(短轮询)也是一样的速度。

在控制台中,传递延迟设置为 0。

我做错了什么?有没有办法配置或编码以几乎与发送消息一样快?谢谢!

【问题讨论】:

    标签: amazon-web-services amazon-sqs


    【解决方案1】:

    SQS 是一个基于拉取的队列。您将 WaitTimeSeconds 设置为 0,这意味着来自 SQS 的响应将立即返回。但是您会定期向 SQS 发送请求,如果响应为空,AWS 客户端会后退,并且每次都等待更长的时间。

    如果您立即需要一个事件,您应该使用基于推送的队列。在 AWS 上是 SNS。您订阅了一个 SNS 主题,它会在收到消息后立即发送消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多