首页 > 解决方案 > 使用哪个 aws 消息服务

问题描述

我正在做一个需要处理消息的项目。现在,每条消息都与具有唯一 consumerId 的消费者相关联。我的要求是我希望一个唯一的 consumerId 的所有消息都被一一处理。即对于给定的consumerId,只有一个消费者应该处理消息。

aws 是否提供任何满足我条件的消息传递服务?

标签: amazon-web-servicesmessage-queue

解决方案


这听起来像是 Amazon Kinesis Data Stream 的一个很好的使用模式。

可以为 Kinesis Data Stream 分配多个分片。将每个分片视为一个单独的消息队列,其中每条消息都按接收顺序保存。

将消息发送到 Kinesis Data Stream 时,您需要提供一个经过哈希处理的分区键,然后用于确定将消息发送到哪个分片。如果您只有一个分片,则所有消息都会进入该分片。如果您有 10 个分片,那么只要分区键有足够的多样性,消息就会被分配到最多 10 个队列。

然后可以使用您自己的工作人员(例如在 Amazon EC2 实例上运行)使用这些消息,或者流可以自动触发AWS Lambda 函数

这是相关位的来源......您的工作人员(或 Lambda 函数)将一次处理来自给定 shard 的一条消息。只有当该消息被处理后,它才会从同一个分片中拉出另一条消息。这意味着来自相同的消息consumerId(如分区密钥所示)将始终按照它们到达的顺序进行处理。

可以将其想象为人们被分配到Bank 中的队列,其中队列按名称(AK,LZ)分配。使用此方法,一个人将始终被发送到同一个队列,每个队列将仅由一名银行柜员处理。


推荐阅读