iLe*_*ing 18 amazon-sqs amazon-web-services
我知道SQS不是为此而构建的,但我很好奇是否可以在符合某些条件的队列中查找消息?
我可以在循环中提取消息,在消息体中搜索某些模式(甚至不反序列化它们),并过滤我需要的消息.但是有可能最终得到一个无限循环 - 我读到的第一个消息将在我到达队列末尾时返回队列...
扩展消息的可见性,但我如何确切地知道扫描整个队列需要多长时间,以及我应该延长可见性多长时间?如果我在那里有一万条消息怎么办?
这里有解决方法吗?我需要扫描队列中的某些消息,然后删除那些消息......
Rya*_*man 17
简答:不.
队列专为任务而设计.机器从队列中获取新任务(即消息),执行任务,然后删除任务.
如果您正在尝试搜索邮件以过滤它们,我不禁想知道您是否使用了错误的工具来完成工作......
我认为短期或长期答案都不是“否”。
这是两个对策解决方案,它们是“是”。
1.遍历队列,维护访问列表
考虑带有N消息的队列的情况,其中没有添加或删除消息。如果没有其他信息(例如,如果您知道应该符合条件的邮件数量),则需要遍历所有N邮件。
这里的重点是知道何时遍历所有N消息。这里有一些问题。
ApproximateNumberOfMessages队列的属性为了维护访问列表,当您收到消息并评估匹配标准时,可以存储message_id所有访问消息的。
消息ID 几乎是唯一的。看到这个线程
https://forums.aws.amazon.com/message.jspa?messageID=76119
如果使用(3),则无法确定要耗尽队列需要多少次迭代。但是,如果无限期地执行此操作,则只要保证SQS分片服务器上的加权随机分布使它们全都为非零概率,就可以保证消除队列。
2.使用企业集成模式(消息路由)根据条件将消息拆分为下游
如果您可以控制消息传递体系结构,则可以将消息路由器用作“前端”消息处理器,该处理器根据条件将消息分发给各个收件人。
特别是您将使用基于内容的路由器:
http://www.enterpriseintegrationpatterns.com/patterns/messaging/ContentBasedRouter.html
| 归档时间: |
|
| 查看次数: |
13300 次 |
| 最近记录: |