将 Lambda 函数作为 REST 端点的 API Gateway:如何实现类单例行为?

0

【以下的问题经过翻译处理】 你好, 我有一个API Gateway,暴露了一个Java REST API。每个端点都与一个lambda函数集成。有几个独立的lambda函数,每个函数都有自己的处理程序。它们都扩展了相同的基类。基类定义了一个静态的Hashmap,每个lambda函数都继承了它。一个lambda函数将数据存储在这个Hashmap中,另一个函数则应该获取数据。每个Lambda函数都由单独的HTTP请求触发。

当将其部署到CDI容器中作为单例时,这可以正常工作。但是,在部署到AWS时,使用API Gateway的lambda函数应该获取由其他lambda函数存储的数据时,发现Hashmap为空。这意味着,尽管是静态的,但Hashmap会随着任何HTTP请求而被实例化。

这类似于CDI @RequestScoped注释。是否有任何方式可以配置API Gateway端点,以便具有与使用CDI @Singleton或@ApplicationScoped注释时相同的效果?

profile picture
エキスパート
質問済み 5ヶ月前35ビュー
1回答
0

【以下的回答经过翻译处理】 你需要明白的是,每个 Lambda 函数,甚至每个函数实例都运行在自己的虚拟机中。我想讲的是,如果有几个 Java 子类扩展同一个静态超类,就像有一个单一的类实例。这是因为静态属性,也叫类属性,不会被继承,而是和超类实例一起保留。因此,将多个 Lambda 函数映射到这个 Java 模型层次结构上,应该就像有一个单一的 Lambda 函数。在这种情况下,调用不同的 Lambda 函数应该与调用同一 Lambda 函数实例的行为完全一致。这是因为这些 Lambda 函数映射到的 Java 类都是同一个静态超类的子类。 但是,正如你所说的那样,事情并非如此。因此,AWS Lambda 不遵守 Java 的基本继承和实例化规则。作为 Lambda 函数运行相同的 Java 类不能提供相同的结果,这不是一致的。

profile picture
エキスパート
回答済み 5ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ