监控亚马逊SQS延迟处理

3

我有一系列从SQS队列中消费消息的应用程序。如果其中一个消费者由于某种原因而失败并停止消费消息,我想得到通知。最好的方法是什么?

请注意,这些队列中有些可能每2-3天只放入一个消息,因此等待队列中的消息数量触发通知不是一个好选择。

我正在寻找的是可以监视SQS队列并说“这条消息已经在这里一个小时了,没有被处理...让某人知道”的东西。


我认为所需的解决方案可能依赖于其他AWS服务。 要跟踪您所描述的内容,可以使用Amazon CloudWatch服务,它允许您跟踪SQS队列的状态。请查看相关文档。 不同的问题是如何在不设置CloudWatch警报的情况下实现跟踪。如果您可以接受服务故障后1小时延迟,可以在AWS上设置一个每小时的lambda函数来进行跟踪和通知。您也可以开发自己的解决方案作为定时cron作业监视。 - Yerken
云监控服务似乎没有适合我的需求的计数器。也许我只是忽略了它?Lambda(无服务器计算服务)的想法很有趣...我会调查一下,谢谢。 - Warrick FitzGerald
我有一些问题,这些问题将指导出最佳解决方案。您轮询队列的频率是多少?您是否使用长轮询并持续轮询(考虑到您的消息量,这似乎有点过度),还是每隔几个小时进行一次轮询?处理一条消息需要多长时间?您更关心监控队列中的消息还是消费队列中消息的应用程序? - JaredHatfield
我的应用程序将消息推送到一个SNS主题,然后有多个SQS订阅者。然后有多个消费者...X部门可能负责从队列A中消费,而Y部门可能负责从队列B中消费。作为一个经验法则,我们不希望消息在SQS队列中超过10分钟。如果消息在队列中超过10分钟,要么消费者由于某种原因停止处理...要么无法跟上。我正在尝试创建一个警报系统,告诉我这两种情况之一是否存在。 - Warrick FitzGerald
1个回答

0

我脑海中想到的可能解决方案(可能不是最优雅的)完全不需要使用CloudWatch(根据OP的评论,所需跟踪不能通过CloudWatch警报实现)。假设您有要在Service中处理的队列,并且接收方通过长轮询实现。运行一个Lambda函数(比如每小时一次),监听队列并读取消息,但永远不删除消息(Service在处理完成后删除消息)。在队列上设置最大接收次数为任意值,假设为3。如果Lambda函数运行了3次且三次都有消息存在于队列中,则该消息将被推送到死信队列(如果设置了重试策略则会自动推送)。每当新消息被推送到死信队列时,这是一个很好的指示器,表明您的服务要么宕机要么无法快速处理请求。所有变量都可以根据您的需求进行更改


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接