1

我目前有第三方应用程序通过API网关将消息推送到Lambda函数。 Lambda函数需要序列化,记录并将消息推送到另一个我几乎无法控制的ESB。使用队列可靠地将事件从API网关推送到Lambda

我试图确保在Lambda函数处于最大负载或无法与ESB通信的情况下存在某种恢复机制。我已经读过关于Kinesis是一个很好的选择,但ESB不支持我的用例的批处理。

这会导致我遇到一些消息可能会使其进入ESB的情况,而其他消息则不会最终导致批处理失败。然后,当批处理重试时,这些消息将在ESB中复制。

有没有一种方法可以利用Kinesis在没有配料的情况下提供的功能?是否有另一种更适合我的用例的AWS产品?理想情况下,我将有一条消息由Lambda函数处理,直到它被成功推入到ESB中后才会保留在队列中。

任何提示将不胜感激。

感谢,
马特

+0

我觉得SQS队列是最好的。请参阅[本文](https://stackoverflow.com/questions/41097441/how-to-integrate-api-gateway-with-sqs)解决方案的第一部分的示例。但是,Lambda和SQS可能是一个糟糕的组合,因为您需要轮询队列以获取数据。另一种可能性是DynamoDB表,但它与SQS类似。你在使用Lambda吗?什么是您的延迟要求? – stdunbar

+0

推送消息的频率是多少?是实时流还是小时等?当您说最大负载是指“达到每次调用的AWS Lambda资源限制”时,或者您的意思是API网关节流? – Nicholas

+0

@Nicholas消息不被频繁推送。这是实时的,但我认为一分钟内通常不会超过10条消息。我只关心ESB将不可用,或者在极少数情况下由于最大调用而导致Lambda不可用,所以我需要某种回退。消息只传递一次的某种队列将是理想的。 –

回答

0

下面可能对你有所帮助:

1)安装程序API网关登录到SQS和2)然后设置上SQS队列lambda函数序列化,记录并将消息推送到外部端点。

对于第一部分:How to integrate API Gateway with SQS这将有所帮助。 (如已经在评论中提到)

这篇文章可以帮助您更多的第二部分:(基于用例)https://dzone.com/articles/integrate-sqs-and-lambda-serverless-architecture-f

请注意,您也可以选择你喜欢什么类型的触发 - cron的基于轮询/或基于事件,您还可以控制何时从您的lambda函数中的sqs中删除。 (你也可以在名为“sqs-poller”的lambda蓝图中找到非常基本的代码)。

谢谢!

相关问题