2015-10-20 180 views
0

我正在研究将现有的消息队列(Mosquitto MQTT)移动到云(Amazon SQS)的可行性。亚马逊SQS子队列

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

/MyQueueName/USER1/

/MyQueueName /用户2/

/MyQueueName /用户3/

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

SQS似乎没有创建子队列的能力,也没有过滤消息属性的灵活性。我可以允许所有邮件发送到所有计算机,然后只在内容相关的情况下才采取措施,但这看起来很浪费,特别是考虑到我们目前正在讨论20,000个以上的子队列。

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

任何洞察赞赏。

感谢, 菲尔

回答

1

我不认为SQS会为这方面的工作。是的,你可以创建队列,但有一点需要记住的是,只有一个消费者会收到一条消息(即,当你发送到“主题”队列时,不是每个听队列和抓取消息的人都会得到它)。

一个澄清问题:处理消息的顺序是否重要?

如果您想在AWS-land中执行此操作,我会尽量使用这种方法,因为我实际上使用的是带有HTTPS端点的SNS。您可以动态订阅和取消订阅您创建的SNS端点,以及终端必须位于公共互联网上的缺点。每当有人向SNS主题发布消息时,所有订阅者都会收到该消息。

+0

订单不是太重要(我可以在客户端处理订单),但时间更重要。这些消息需要在5秒内传递给任何订阅的客户端 - 否则在此之后它们包含的数据价值不大。 另外我需要确保只有正确的用户抓住信息。如果客户端从队列中获取与用户名无关的消息,则会阻止正确的用户使用该消息。 与SNS有趣的想法。我想知道C#.net是否可以订阅SNS端点,我认为它只是用于移动设备? – PhilH

+0

nope。 SNS可以做HTTP/SQS/SMS端点等。你的客户是否在开放的互联网上?如果是,那就是我会走的路。只要您有编写最小HTTP服务器的支持,C#(以及任何其他语言)都可以订阅端点并使用通知。 (SNS基本上发布到您的网址) – Mircea