Aws lambda Lambda推送到SQS-同步或异步

Aws lambda Lambda推送到SQS-同步或异步,aws-lambda,amazon-sqs,Aws Lambda,Amazon Sqs,我有以下情况: 运动->Lambda->sqs 每次我收到来自Kinesis的消息时,它都会触发一个lambda进程,该进程解析该消息并将其发送到SQS,其中顺序很重要,因此我将有一个FIFO队列 首先,对于lambda,我想实现一个AmazonSQSAsyncClient,但我认为在这种情况下没有意义(实现AmazonSQSClient应该是一样的),因为每个消息都有一个lambda进程。AmazonSQSAsyncClient对于永久运行的进程非常有用 我想确认一下 AmazonSQSAsy

我有以下情况:

运动->Lambda->sqs

每次我收到来自Kinesis的消息时,它都会触发一个lambda进程,该进程解析该消息并将其发送到SQS,其中顺序很重要,因此我将有一个FIFO队列

首先,对于lambda,我想实现一个AmazonSQSAsyncClient,但我认为在这种情况下没有意义(实现AmazonSQSClient应该是一样的),因为每个消息都有一个lambda进程。AmazonSQSAsyncClient对于永久运行的进程非常有用

我想确认一下
AmazonSQSAsyncClient或AmazonSQSClient与此情况相同。你怎么认为?是否有其他方法可以做到这一点?

我不理解您关于异步与同步客户端的问题,但下面的文章可能会帮助您处理部分故障:

因此,请在评论中进行澄清:

我在问,使用异步或同步客户端是否会有所不同?我想没有,但我想确定你是怎么想的。还有,如果我推送了一条消息,而队列被打倒了,我该怎么办?我的意思是,有什么我可以检查以了解的吗?考虑到FIFO队列,处理这种情况的好方法是什么

首先,关于订购:

假设您需要从动觉流一直到队列输出保持顺序,那么您有两个选择:

  • 让lambda并行运行,并在lambda和SQS队列之间添加一个排序步骤。这将处理这样一个事实,即如果输入
    [A,B,C]
    转到三个不同的lambda,它们可能会以某种顺序返回
    [C,A,B]
    。也就是说,不能保证它们按照它们获取输入的相同顺序完成

  • 一次不得运行多个lambda

  • 上面哪种选择适合您取决于有多少数据来自于运动流,以及Lambda处理它需要多长时间。如果答案是“不多”或“不长”,那么您可以只让一个Lambda处理所有数据(注意,您可能希望它处理成批数据,而不是一次处理一个数据点)

    接下来,同步或异步

    如果一次只运行一个lambda,那么这可以归结为“等待SQS承担足够的负担,从而值得异步运行”。如果运行并行lambdas并在末尾执行排序步骤,则排序将执行放置操作。在任何一种情况下,我都会假设答案是同步的,因为同步更简单,因此更好,直到您发现其他情况

    最后,SQS失败:


    一般的经验法则是,除非您的正常运行时间要求高于SQS的正常运行时间保证,否则您不必担心。如果SQS关闭,您的lambda将失败。一般来说,您应该有一个处理故障的机制(即,lambda应该重试故障,并在重试次数不足时记录/报警),但无需编写任何逻辑来从SQS故障中恢复,因为除非您的系统正在做一些非常关键的事情,否则只要SQS停止运行,系统停止运行就可以了。

    请您澄清一下:您是否真的需要实现一个客户端,或者您是在问使用异步或同步客户端是否会有所不同?如果是后者,也许有一句话可以帮助你重新回答你的问题,比如“我认为我的用例更适合同步客户机,这是对的吗?除了每个lambda使用一个客户机来解析我的消息并将它们发送到我的SQS队列之外,还有什么更好的选择我没有考虑吗?”:)还有:“顺序很重要”:这是否意味着您需要SQS队列以与kinesis相同的顺序输出对象?例如[A,B,C]->动觉->Lambda->[A'B'C']->SQS->[A'B'C']?因为如果是这样的话,你就不能轻易地让一个以上的lambda来处理你的运动流。你需要一些方法来保证顺序不变,或者限制你自己一次只运行一个lambda,因为不能保证lambda按照你想要的顺序开始,完成,并按照你想要的顺序推送到队列。事实上,顺序很重要,因此我需要一个FIFO队列。我在问,使用异步或同步客户端是否会有所不同?我想没有,但我想确定你是怎么想的。还有,如果我推送了一条消息,而队列被打倒了,我该怎么办?我的意思是,有什么我可以检查以了解的吗?考虑到FIFO队列,处理这种情况的好方法是什么?谢谢-这篇文章可能包含有用的信息,但非SO网站的链接可能不可靠。最佳做法是引述,请参阅::“鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引述重要链接中最相关的部分,以防无法访问目标网站或永久脱机。”非常感谢您的澄清。在编写anwser之前,我应该阅读指南:(