【问题标题】:Polling an AWS SQS queue for messages with certain attributes轮询 AWS SQS 队列以获取具有特定属性的消息
【发布时间】:2021-03-07 19:31:27
【问题描述】:

我已经使用 AWS SQS 设置了一个标准队列,我想轮询此 queue 以获取包含 具体attribute,最好使用python中的boto3库。我知道boto3 有一个 方法recieve_message() 从队列中轮询消息。但是,我只想获取那些包含特定属性的消息。一种天真的方法是遍历receive_message() 输出并检查receive_message() 中的message 是否包含attribute,但我想知道是否有其他解决方案来解决这个问题。

【问题讨论】:

  • 谁在将 msg 发布到 sqs?你的申请也是这样吗?
  • 是的,我有一条 EC2 将消息推送到 SQS 队列,我想从 lambda 轮询这些消息,但我只想要那些包含特定消息属性的消息。 boto3库有这个功能:here,MessageAttributeNames有这个功能吗?
  • 您可以发送 SNS,然后 SQS 订阅 SNS 吗?
  • 基本上我将已完成的作业排入队列(或通知服务),并从 lambda 我想通过轮询作业 ID 来检查作业是否已完成。 ID 是“唯一的”,所以我不想为作业 ID 创建单独的队列。我正在考虑发布一条带有作业 ID 作为 SNS 属性的消息,并让 lambda 订阅该主题。但我不知道 SNS 中的 API 调用会执行 topic.filterMessagesByAttribute(attribute)

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


【解决方案1】:

您不能单独使用 SQS 过滤某些消息,但是,您可以使用 SNS 来过滤。

您可以将消息发布到 SNS 主题。 SNS 的消息过滤功能使订阅 SNS 主题的端点只能接收它感兴趣的主题消息的子集。因此,您可以确保只有具有特定属性的相关消息才能进入消费者的队列。

请参阅Filter Messages Published to TopicsSNS subscription filtering policies

【讨论】:

    【解决方案2】:

    SQS ReceiveMessage API 不支持选择性轮询。另一种方法是让您的 EC2 将包含不同属性的消息发送到不同的 SQS 队列。

    【讨论】:

      猜你喜欢
      • 2019-04-26
      • 1970-01-01
      • 2015-09-28
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2021-03-30
      • 2019-12-31
      相关资源
      最近更新 更多