【问题标题】:AWS SQS always return 1 message (PHP SDK)AWS SQS 总是返回 1 条消息(PHP 开发工具包)
【发布时间】:2018-04-26 07:44:51
【问题描述】:

我在使用 AWS SQS 的 receiveMessage 功能时遇到问题。它总是返回 1 条随机消息

        $result = $client->receiveMessage(array(
            'MaxNumberOfMessages' => 10,
            'MessageAttributeNames' => ['All'],
            'QueueUrl' => AConfig::sqs_query_url, // REQUIRED
            'WaitTimeSeconds' => 10,
        ));

请给个建议:(

还有一个问题:是否有办法按 sender_id 过滤消息?

谢谢!

【问题讨论】:

    标签: amazon-web-services amazon aws-sdk amazon-sqs


    【解决方案1】:

    这是因为 AWS SQS 的性质。您的消息在一个队列中不是物理的,它们在内部分布在不同的队列中。

    因此,文档说明如下:

    [...] 如果队列中的消息数量很少(少于 1,000),您收到的消息很可能少于您每次请求的消息 接收消息调用。 [...]

    更多详情请查看AWS SQS - Documentation

    【讨论】:

    • 谢谢你的回答,过滤器怎么样?我找不到任何功能来做到这一点:|
    • 在我看来这个功能不存在。你想做什么?也许我们可以找到更好的选择:-)
    • 我正在尝试获取许多消息以从另一个系统同步数据。服务器 A 向 SQS 发送消息,服务器 B 将获取并保存数据,然后将具有新状态的对象重新发送到 SQS,服务器 A 获取并检查。我想向 SQS 发送一个大的 json 数据,但 SQS 只允许发送最大字符串长度为 256KB。如果将 json 与子消息分开,我必须循环获取所有消息,因为 SQS 只响应很少的消息,并非所有消息 => 将发送大请求,我必须为此付费:|
    • 我不知道这是否是一种常见的做法,但您可以执行以下操作:服务器 A 将大 json 数据放入 S3。在该存储桶上,您必须设置Events,它侦听ObjectCreate 事件并通知SNS Topic。服务器 B 订阅了这个SNS Topic。一旦服务器 B 完成数据处理,它就会通知另一个 SNS Topic 订阅服务器 A。
    • 我在使用 Java API 时遇到了同样的问题,但我的队列中恰好有超过 80k 条消息,所以我猜这与短轮询方法无关。
    猜你喜欢
    • 2020-03-20
    • 2020-01-11
    • 1970-01-01
    • 2018-03-22
    • 2013-12-13
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多