【问题标题】:SQS maximum number of messages using phpSQS使用php的最大消息数
【发布时间】:2019-08-08 09:26:33
【问题描述】:

SQS - 我需要在批处理响应中获取更多消息。

我已经设置了 SQS 队列,我正在处理我的其他太大的库存数据。在一个批次中,它只提供 10 条消息,这不符合我的要求。我在 PHP 中使用它。有没有人合作过并取得成功?

我参考了许多指导,并对使用长轮询有了一些想法。但是有人可以给出一些提示吗?我已经完成了非常基础的 SQS。

我希望每天根据 SQS 响应处理数千个数据。

【问题讨论】:

  • 在一次ReceiveMessages() 调用中可从 Amazon SQS 队列获取的最大消息数为 10。如果这对您的用例不满意,则另一种架构可能更合适。您可以编辑您的问题以提供您想要实现的目标的详细信息吗?例如,为什么有这么多消息被发送到 SQS?它是什么类型的数据,你对它做了什么处理?
  • 当然。我已订阅 AnyOfferChangedNotification 并使用 SQS 获取优惠数据。现在每批我只收到 10 个 ASIN 的报价发生了变化。基于这些回复,我想进一步处理我在亚马逊上的报价。我想每天处理这个。我的活动列表有数千个,所以我如何更新我在亚马逊上的优惠价格。如果您能提供任何其他更好的选择,我将不胜感激。目前我正在使用基本流程运行 SQS。

标签: amazon-web-services amazon-sqs amazon-mws


【解决方案1】:

您似乎指的是来自亚马逊商城网络服务 (Amazon MWS)AnyOfferChangedNotification

来自Receiving notifications

要接收通知,您必须先创建一个目标。目前,通知只能发送到 Amazon Simple Queue Service (Amazon SQS) 标准队列。

因此,您似乎无法控制信息的接收方式——它必须发送到 Amazon SQS 队列。

有几种方法可以处理来自队列的信息:

  • 在 Internet 上的某个地方运行消费者
  • Amazon EC2 实例上运行消费者,如果消息量很大,最好跨多个实例。
  • 当数据发送到队列时触发 AWS Lambda 函数。多个 Lambda 函数可以并行运行以处理数据。

您没有提供太多关于如何处理数据的信息,因此不清楚它是否可以并行处理,或者它是否主要需要按顺序处理。

听起来您目前正在通过单线程 PHP 程序处理消息,无论是在 Amazon EC2 实例上还是在其他地方。

我建议您调查采用 无服务器方法,使用 AWS Lambda 函数来处理消息。这样,它可以自动扩展以处理大量负载,同时在没有要处理的消息时不花费任何成本。它也可能比在 Amazon EC2 上运行的成本更低。

【讨论】:

    【解决方案2】:

    几年前,我使用 AnyOfferChanged 通知运行了一个相当大的流程。是的,您一次只能接收 10 条消息,但是,您可以运行多个线程或消费者进程的多个实例。我的公司在亚马逊上销售了 10,000 个 SKU,除非我跟上,否则队列中会有数万条消息。

    我在 Azure 上有一个云服务器,但 EC2 就可以了。它运行一个基于当前消息计数启动任意数量线程的 Windows 服务。更多消息,更多线程。每个线程一次十个,直到消息计数降到零。当为零时,我会让服务休眠几秒钟。我的过程涉及读取 10 条消息,然后将它们写入 SQL Server(这些天可能使用 DynamoDB)。我有另一个流程,每半小时或一小时触发一次,它读取我的 SQL 表中的价格通知,执行重新定价,并使用任何新价格更新亚马逊。

    我会多次收到同一 SKU 的价格变化。亚马逊和其他卖家像我一样玩游戏,你改变价格,他们拿起改变然后他们改变他们的价格。每次更改都会触发 SQS 通知。所以我所做的是将价格变化写到我的 SQL 表中,我会覆盖任何现有记录。所以当我的重新定价引擎被触发时,我总是有最新的价格变化。我会考虑时间安排,以免在亚马逊上更新我的价格。你会陷入最低谷并快速赔钱。

    如果我今天要重写它,我很可能会听从 John 的建议并在 AWS 上运行 Lambdas。但关键是并行运行多个消费者,因为您很可能需要处理大量通知。

    【讨论】:

      【解决方案3】:

      想法几乎相同,您将需要 Lambda 函数或专用 Ec2 来托管 Sqs 队列消费者(代码)。

      在我的场景中,由于每小时生成数百万条通知,我无法跟上 Lambda 的进度。 Lambda 涉及的关键问题是并发问题。

      但是,我最终将 Ec2 Auto Scaling 组与 Spot 实例一起使用。 Spot 实例是降低成本的关键,因为 Spot 实例可以将计算成本降低 50% 到 90%。

      【讨论】:

      猜你喜欢
      • 2016-07-21
      • 2014-06-06
      • 2015-09-09
      • 2021-10-10
      • 2018-09-26
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多