我想以与插入 sqs 相同的顺序从亚马逊 sqs 获取消息(先进先出模型)。他们有什么方法可以实现吗?我正在使用 zend php 进行编程。
4 回答
无序消息传递是 SQS 设计中固有的。您可以尝试通过对消息进行编号并将无序消息存储在本地直到丢失的消息到达来解决它,但这可能不值得麻烦。
SQS 确实有点奇怪,它按照它所说的去做,但它所做的并不是大多数人在消息总线中寻找的东西。我真的希望亚马逊能提供更像 RabbitMQ 的额外排队解决方案。SQS 实际上只适用于分发甚至没有远程耦合的任务,并且顺序和延迟等事情并不重要。例如,将完成的订单发送到运输中心或安排打印作业会非常有用。
他们自己的文档显示它被用来安排缩略图创建,但是当我最近将它用于这个确切目的时,我很快发现我的用户不会对延迟印象深刻:有时是 30-50 秒。
您仍然可以在 EC2 节点上运行 RabbitMQ,虽然它的可扩展性不如 SQS,但它确实可以集群,并且应该可以带您走很远。
The SQS documentation answers this for you (bold is my emphasis to directly answer your question):
Amazon SQS makes a best effort to preserve order in messages, but due to the distributed nature of the queue, we cannot guarantee you will receive messages in the exact order you sent them. If your system requires that order be preserved, we recommend you place sequencing information in each message so you can reorder the messages upon receipt.
你可以试试IronMQ。它像 SQS 一样托管,保证了先进先出的顺序,没有最终的一致性延迟,具有超强的可扩展性,您可以在几分钟内启动并运行。
这是一个 PHP 库:https ://github.com/iron-io/iron_mq_php
免责声明:我为 Iron.io 工作
我试图实现 FIFO 方式以按照发送消息的相同顺序接收消息
为此,您可以使用它每次发送的消息序列号与消息并在接收端验证
通过使用这种方式,您可以按 FIFO 顺序获得所需的输出