我有一个 Spring Cloud Function 应用程序,具有两个功能:
@Component
public class MyFunctionOne implements Function<Object, Boolean> {
@Override
public Boolean apply(Object o) {
return true;
}
}
@Component
public class MyFunctionTwo implements Function<Object, Boolean> {
@Override
public Boolean apply(Object o) {
return true;
}
}
我的项目依赖项中有
spring-cloud-starter-function-web
和 spring-cloud-function-adapter-aws
。
我想分别打电话给
MyFunctionOne
和MyFunctionTwo
。
我可以通过两种方式实现本地运行。我可以通过调用 localhost:8080/myFunctionOne 直接调用函数(因为我使用的是
spring-cloud-starter-function-web
)来执行此操作。或者,我可以通过调用 localhost:8080/functionRouter 并在 myFunctionOne
http 标头中提供 spring.cloud.function.definition
来使用 Function Routing功能。这工作正常,我可以分别触发
MyFunctionOne
和 MyFunctionTwo
。
我已将该模块部署到 AWS Lambda。如何动态提供
spring.cloud.function.definition
?根据 documentation 我可以使用 org.springframework.cloud.function.adapter.aws.FunctionInvoker
作为 AWS Lambda 处理程序。或者,我也可以定义自己的SpringBootStreamHandler
。但是,似乎无法动态定义spring.cloud.function.definition
。
有没有办法在 Spring Cloud Function 中选择部署到 AWS lambda 的函数?
因此,我们在 AWS 上的路由方面遇到了一些问题,正如我们所说,该问题正在得到解决。您可以关注此问题 - https://github.com/spring-cloud/spring-cloud-function/issues/698。
无论如何,我们将在下周初发布新版本(3.1.3-RELEASE),其中将包括修复程序、示例和文档以解决您所描述的问题
是的,您可以通过向 AWS Lambda 函数添加
SPRING_CLOUD_FUNCTION_DEFINITION
环境变量来配置要使用的函数。
例如
SPRING_CLOUD_FUNCTION_DEFINITION=myFunctionOne
在 AWS 控制台中,您可以在配置 > 环境变量下执行此操作。
在执行期间,Spring 读取环境变量并相应地路由事件。