【问题标题】:Amazon SQS sub-queuesAmazon SQS 子队列
【发布时间】:2016-01-18 21:35:37
【问题描述】:

我正在研究将我们现有的消息队列 (Mosquitto MQTT) 迁移到云 (Amazon SQS) 的可行性。

我们现有的服务使用子队列的概念,这样用户就不会收到不适合他们的消息。例如:

/MyQueueName/user1/

/MyQueueName/user2/

/MyQueueName/user3/

等等

在用户计算机上运行的应用程序订阅与他们自己的用户 ID 相关的子队列。然后他们只会收到与他们相关的消息。

SQS 似乎没有创建子队列的能力,也没有过滤消息属性的灵活性。我可以允许将所有消息发送到所有计算机,然后仅在内容相关时才采取行动,但这似乎很浪费,尤其是考虑到我们目前在大约 20,000 多个子队列中进行讨论。

如何在 SQS 上最好地实现这一点? 我可以在 QueuenameUsername 上以编程方式创建队列,当有消息要从源传递或用户订阅时,然后在用户取消订阅时删除队列。然而,这似乎不是最好的做事方式。创建数千个单独的队列,并且需要一些代码来管理队列的创建,更具体地说,以正确的时间间隔删除队列。

任何见解都值得赞赏。

谢谢, 菲尔

【问题讨论】:

    标签: amazon-web-services message-queue amazon-sqs


    【解决方案1】:

    我认为 SQS 不适用于此。是的,您可以创建队列,但要记住的一件事是,只有一个消费者会收到一条消息(即,当您发送到“主题”队列时,并非所有收听队列并获取消息的人都会收到)。

    一个明确的问题:处理消息的顺序重要吗?

    如果您想在 AWS-land 中执行此操作,我会尝试解决此问题的方式是,我实际上会使用带有 HTTPS 端点的 SNS。您可以动态订阅和取消订阅您创建的 SNS 端点,缺点是端点必须位于公共互联网上。每次有人向 SNS 主题发布消息时,所有订阅者都会收到。

    【讨论】:

    • 顺序不太重要(我可以在客户端处理演示顺序),但时间更重要。消息需要在 5 秒内传递给任何订阅的客户端 - 否则在此之后它们包含的数据就没有什么价值了。另外,我需要确保只有正确的用户才能获取消息。如果客户端要从队列中获取与其用户名无关的消息,那么它将阻止正确的用户使用它。 SNS 的有趣想法。我想知道 C#.net 是否可以订阅 SNS 端点,我以为它只是针对移动设备的?
    • 不。 SNS 可以做 HTTP / SQS / SMS 端点等。你的客户端在开放的互联网上吗?如果是的话,这就是我要走的路。只要您支持编写最小的 HTTP 服务器,C#(以及任何其他语言)就可以订阅端点并使用通知。 (SNS 基本上发布到你的 URL)
    猜你喜欢
    • 2017-04-12
    • 2019-04-11
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    相关资源
    最近更新 更多