python - 管理 AWS SQS 和 DLQ
问题描述
设想 :
创建一个 lambda,每当有消息到达 SQS(假设 SQS-A)时都会触发它。lambda(用 python 编写)负责将传入的有效负载发送到另一个端点。
问题是,每当目标端点或服务器关闭时,我试图将其放入另一个 SQS(假设为 SQS-B),如果出现其他异常而不是将其放入交易信队列中。
这里我想说两件事。
- 如果出现 ConnectionError(python 异常表示端点已关闭),我想停止 SQS-A(因为目标服务器已关闭,所以没有必要运行 lambda)。
(或者)
- 每当我收到此错误时,我都会将其发送到 SQS-B,我希望在第一个请求到来时触发 SQS-B,它应该检查是否仍然存在连接错误,它必须在 10 分钟后触发,然后再次检查,如果异常在 30 分钟后持续触发,像这样我想将时间增加到 4 小时,然后每 4 小时检查/触发 lambda。如果没有例外,那么它应该读取 SQS-B 中的所有消息。
帮助我如何实现任何一种方法或推荐任何其他更好的方法
解决方案
由于一个简单的问题(目标不可用),您正在创建一个复杂的架构。尽量不要使事情过于复杂。
我会推荐:
- 让原始系统将消息发送到Amazon SNS 主题
- 主题触发 Lambda 函数
- 如果它成功处理了消息,则无需进一步操作
- 如果远程终端节点不可用,则将消息放入Amazon SQS 队列以供以后处理
- 使用 Amazon CloudWatch Events每n分钟触发一个 Lambda 函数,该函数抓取队列中的任何消息并尝试再次发送它们。如果远程端点仍处于关闭状态,它将退出并在n分钟后再次尝试该过程。
- 如果消息超过几个小时,可能还值得向管理员发送电子邮件。
如果您必须将原始消息发送到 SQS 队列,那么您可以按照您的描述进行操作...首先发送到 Queue-A,这会触发 Lambda 函数。如果端点关闭,Lambda 会将消息发送到 Queue-B 以供以后处理。但是,仅每n分钟从 Queue-B 处理一次(而不是试图让每个单独的消息都有自己的延迟计时器)。
推荐阅读
- docker - docker服务本地yaml文件中的swagger-ui只显示默认的petstore示例项目
- python - 你能告诉我这有什么问题吗
- powershell - 如何在powershell中将cmdlet或函数名作为参数传递
- amazon-web-services - 编写测试以在 AWS 基础设施上强制执行不变量
- vue.js - Nuxt 中的动态嵌套路由
- python - 有没有办法在不安装 Perl 的情况下在 Python 程序中运行 Perl 脚本?
- firebase - Firebase - 将 Firestore 数组数据获取到 StreamBuilder Flutter
- typescript - 如何向 TS 指示参数上的每个属性都应映射到返回类型上的属性?
- python - 根据向量的颜色散点图
- python - 带有 Google Container Registry 的 Docker SDK