将 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 个月前34 查看次数
1 回答
0

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

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则