在RabbitMQ中,可以创建一个交换,然后将其绑定到多个队列,每个队列都有一个路由密钥。这样就可以实现这样的消息传递体系结构:
message_x
/ | \
foo-msg_q bar-msg_q msg-logger_q
客户端向message_x
交换机发布消息,该消息将路由密钥为“foo”的仅消息路由到foo-msg_q
队列,仅消息使用路由键“bar”到bar-msg_q
队列,所有消息到msg-logger_q
队列。
我无法确定如何在AWS中执行此操作。我的第一个想法是在各个队列上设置权限以接受基于主题的消息,但是权限条件的唯一可用字段是:
这些似乎都不会受到我发布到message_x
主题的任何消息的影响。
当使用Amazon Simple Notification Service扇出到多个简单队列服务队列时,是否可以做这样的事情,每个队列接收发布到该主题的消息子集?
答案 0 :(得分:15)
这可以通过在SNS中使用消息属性过滤来实现。在将不同的SQS队列订阅到SNS主题后,可以使用SNS API SetSubscriptionAttributes指定要过滤的属性。这将允许具有不同属性的消息路由到正确的SQS队列。
这也不仅限于SQS队列,还包括SNS主题上的任何订阅源。例如,单个SNS主题可以将一组消息发布到Lambda,另一组发送到SQS。
SDK参考: http://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html
此处提供了更多详细信息,并附有示例: https://aws.amazon.com/blogs/compute/simplify-pubsub-messaging-with-amazon-sns-message-filtering/
答案 1 :(得分:5)
我无法删除已接受的答案,因此请参阅the answer below以获取现在正确答案,因为此功能已发布。
不,这是不可能的。这将是他们添加的一个很棒的功能 虽然。
我知道的唯一选择是为每个路由规则创建一个主题 然后发布到正确的主题。它不漂亮,但它 完成任务。如果你有很多规则,你可能需要 超过他们允许的3000个主题。你可以要求增加 按照说明从AWS在其网站上限制主题 这里 http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_ses_quota