【问题标题】:managing AWS SQS and DLQ管理 AWS SQS 和 DLQ
【发布时间】:2018-12-28 16:32:12
【问题描述】:

场景:

创建一个 lambda,每当有消息到达 SQS(假设 SQS-A)时都会触发它。 lambda(用python编写)负责将传入的payload发送到另一个端点。

问题是,每当目标端点或服务器出现故障时,我试图将其放入另一个 SQS(假设为 SQS-B),如果出现其他异常而不是将其放入交易信队列。

在这里,我想说两件事。

  1. 如果出现 ConnectionError(python 异常表示端点已关闭),我想停止 SQS-A(因为目标服务器已关闭,所以没有必要运行 lambda)。

(或)

  1. 每当我收到此错误时,我都会将其发送到 SQS-B,我希望 SQS-B 在第一个请求到来时触发,它应该检查是否仍然存在连接错误,它必须触发10分钟后,再次检查,如果异常仍然存在30分钟后触发,像这样 我想将时间增加到 4 小时,然后每 4 小时检查/触发一次 lambda。如果没有异常,则应该读取 SQS-B 中的所有消息。

帮助我如何实现任何一种方法或推荐任何其他更好的方法

【问题讨论】:

    标签: python amazon-web-services aws-lambda amazon-sqs


    【解决方案1】:

    由于一个简单的问题(目标不可用),您正在创建一个复杂的架构。尽量不要使事情过于复杂。

    我会推荐:

    • 让原始系统将消息发送到 Amazon SNS 主题
    • 主题触发 Lambda 函数
      • 如果它成功处理了消息,则无需进一步操作
      • 如果远程终端节点不可用,请将消息放入 Amazon SQS 队列 以供以后处理
    • 使用 Amazon CloudWatch Eventsn 分钟触发一个 Lambda 函数,该函数抓取队列中的任何消息并尝试再次发送它们。如果远程端点仍处于关闭状态,它将退出并在 n 分钟后再次尝试该过程。
      • 如果邮件超过几个小时,可能还值得向管理员发送电子邮件。

    如果您必须将原始消息发送到 SQS 队列,那么您可以按照您的描述进行操作...首先发送到 Queue-A,这会触发 Lambda 函数。如果端点关闭,Lambda 会将消息发送到 Queue-B 以供以后处理。但是,仅每 n 分钟从 Queue-B 处理一次(而不是试图让每个单独的消息都有自己的延迟计时器)。

    【讨论】:

    • 嗨@John Rotenstein,感谢您的回复。例如,Queue-B 中有 1000 条消息,它每 n 分钟触发一次,如果目标不可用,则没有必要从 Queue-B 触发 1000 条消息。如果目标已关闭并在 n 分钟后尝试,是否有任何方法可以停止第一条消息。我相信如果 Queue 中有 n 消息可用并且 lambda 触发了它,那么它肯定会调用 n 次 lambda 函数并且没有必要就我而言,正如我们所知,在第一次调用本身时,目标已关闭。
    • 澄清一下:每 n 分钟触发一次的 Lambda 作业将抓取第一条消息并尝试发送它。如果失败,该函数将直接退出。然后它会在另一个 n 分钟后被触发,它会尝试同样的事情。在最坏的情况下,它只会在退出之前尝试一条消息。但是,如果第一条消息有效,它将继续处理消息,直到再次失败或队列 B 为空。
    • lambda 最大配置超时为 5 分钟。在那段时间里,我无法处理数千条消息。这就是原因,我将 lambda 附加到 SQS,以便每当消息到达 SQS 时,都会触发 lambda 并处理消息。这就是我所说的情况,在 n 分钟后,将启用/附加 lambda 到 SQS,以便它可以处理。但问题是对于SQS中的所有消息,它会多次触发lambda,甚至第一条消息都没有处理。
    • 我的建议是最初尝试每条消息(浪费,是的,但就是这样)。如果失败,则进入队列 B。然后,队列 B 每 n 分钟尝试一次。如果队列 B lambda 函数超时,则消息将在 n 分钟后与下一次调用一起发送。 (所以,将 n 设置为 5 分钟!)不要将 Lambda 直接链接到队列 B。而是通过“每 n 分钟”的 lambda 函数处理它。
    • 好吧,这种情况很少发生,也就是说,如果 lambda 提前部署,在目标服务器未部署之前或目标服务器中发生的任何其他问题,使其停机。所以,每 n 分钟运行一次 cron 作业是一个合适的解决方案,即使它在蓝月亮中发生一次?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多