【发布时间】:2017-07-24 21:45:11
【问题描述】:
我目前有一个第三方应用程序通过 API 网关将消息推送到 Lambda 函数。 Lambda 函数需要对消息进行序列化、记录和推送到另一个我几乎无法控制的 ESB。
我试图确保在 Lambda 函数处于最大负载或无法与 ESB 通信的情况下存在某种恢复机制。我已经读过 Kinesis 是一个很好的选择,但是 ESB 不支持对我的用例进行批处理。
这会导致我遇到一些消息可能会到达 ESB 而其他消息不会到达的场景,这最终会导致批处理失败。然后,当重试批处理时,消息将在 ESB 中复制。
有没有一种方法可以在不进行批处理的情况下利用 Kinesis 提供的功能?是否有其他 AWS 产品更适合我的用例?理想情况下,我会让 Lambda 函数处理一条消息,该消息会一直保留在队列中,直到它成功推送到 ESB。
任何提示将不胜感激。
谢谢,
马特
【问题讨论】:
-
我觉得 SQS 队列是最好的。有关解决方案第一部分的示例,请参阅this post。但是 Lambda 和 SQS 可能是一个糟糕的组合,因为您需要轮询队列以获取数据。另一种可能性是 DynamoDB 表,但它与 SQS 的问题类似。你被 Lambda 卡住了吗?您的延迟要求是什么?
-
推送消息的频率是多少?它是实时流媒体还是每小时等..?当您说最大负载时,您的意思是“每次调用的 AWS Lambda 资源限制”已达到,或者您的意思是 API Gateway 节流?
-
@Nicholas 消息推送的频率不是很高。它是实时的,但我想说一分钟内推送的消息通常不超过 10 条。我只是担心 ESB 将不可用,或者在极少数情况下,由于调用次数最多,Lambda 将不可用,所以我需要某种回退。消息只传递一次的某种队列是理想的。
-
是否需要保留消息顺序?
-
jjones 有一个很好的观点 - 你想要时间旅行吗?这些消息是否可以乱序处理
标签: amazon-web-services lambda aws-api-gateway amazon-kinesis