【发布时间】:2021-07-25 22:23:00
【问题描述】:
我有一个长时间运行的 AWS Lambda 函数,我正在从我的 web 应用程序执行该函数。使用文档 [1],它可以正常工作,但是我的问题是这个特定的 lambda 函数不会将任何内容返回给应用程序,它的输出会保存到 S3,并且运行了很长时间 20-30 秒。有没有办法触发 lambda 而不是等待返回值,因为我不想在 lambda 运行时等待/阻止我的应用程序。现在我使用ExecutorService 作为队列来执行 lambda 请求,因为我必须等待每次调用,当应用程序崩溃或重新启动时,我会丢失等待执行的作业。
[1]https://aws.amazon.com/blogs/developer/invoking-aws-lambda-functions-from-java/
【问题讨论】:
-
如果某些东西是异步的,为什么不使用 SQS/kinesis/MSK?
-
同样,您可以通过从这些选项触发 lambda 以及通过向相应的队列/分片/主题生成任何客户端语言的消息来将 Java 与调用函数分离
-
@OneCricketeer 我希望将移动部件保持在最低限度,不要过度依赖 AWS 服务,以便更轻松地测试本地开发
-
查看
localstack项目,在模拟或 AWS 生态系统之外进行集成测试。如果你使用 MSK,你可以在本地运行 Kafka -
否则,您可以触发并忘记调用 lambda 的线程,但是您需要持久化每个执行事件以跟踪这些调用是否真正完成,或者不断轮询 S3 以获取更新
标签: java amazon-web-services aws-lambda