AWS SQS 是否有办法在处理时通过 AttributeName 过滤想要的数据的呢?

2017-10-19 23:32:06 +08:00
 kslr

提交消息的时候 message 携带了消息属性字段,比如由谁谁谁来单独处理。

{
  'Id': '1',
  'MessageBody': 'world'
},
{
  'Id': '2',
  'MessageBody': 'boto3',
  'MessageAttributes': {
    'Author': {
      'StringValue': 'Daniel',
      'DataType': 'String'
     }
   }
}

但是发现在处理的时候只能根据属性名称过滤,没有办法根据内容处理。

for message in queue.receive_messages(MessageAttributeNames=['Author']):
    # Get the custom author message attribute if it was set
    author_text = ''
    if message.message_attributes is not None:
        author_name = message.message_attributes.get('Author').get('StringValue')
        if author_name:
            author_text = ' ({0})'.format(author_name)

    # Print out the body and author (if set)
    print('Hello, {0}!{1}'.format(message.body, author_text))

    # Let the queue know that the message is processed
    message.delete()

假如每次都要拿到数据判断一下再放回去,这样进程就会陷入恶性竞争吧?

速度比较快的 work 永远让消息处于不可用中,有没有办法只获得某种特殊类型的消息呢?

比如 Author = Daniel ?

783 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/399085

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX