如何使用lambda Java SDK读取来自SQS的所有消息,聚合所有这些消息并将它们作为单个JSON文件存储到S3存储桶?

问题描述 投票:0回答:2

我正在尝试从SQL读取所有消息,聚合所有这些消息并使用lambda Java SDK将它们作为单个JSON文件存储到S3存储桶?

以下步骤涉及我的实施

  1. 创建标准SQS并向该SQS发送500条消息
  2. 写一个lambda使用while循环从该SQS读取所有消息(直到消息计数变为零)
  3. 在读取来自该SQS的所有消息之后,现在这个lambda将必须将所有接收到的消息聚合到ArrayList中,并将arraylist转换为单个JSON文件并将此JSON文件存储在S3存储桶中

现在我陷入第3步,因为AWS在读取SQS消息时跨越多个lambda实例,因此我无法在一个ArrayList聚合收到的消息,我是否应该使用Dynamo DB聚合所有消息并创建单个JSON文件并存储在S3桶中?

请提出解决方案以解决此问题

谢谢,漂亮

amazon-web-services aws-lambda amazon-sqs aws-java-sdk
2个回答
0
投票

将Lambda函数中的ReservedConcurrentExecutions属性设置为1,从而避免多个实例旋转。

enter image description here


0
投票

你的用例更适合Kinesis Stream

流本质上是一个队列,但有一些重要的区别,主要是在您的场景中,这些差异是Lambda可以从Kinesis获取的批量大小上限为10000事件或6mb,而不是像SQS中的10个事件。您只需创建一个带有1个分片的Kinesis流,这意味着只有1个Lambda将运行,它将同步读取数据。如果你这样做,那么你不必小批量地读取SQS,也不必担心多个Lambda实例

一些有用的参考:Using Lambda with Kinesis as an event source

© www.soinside.com 2019 - 2024. All rights reserved.