Spring 云函数无法从消息中读取函数定义 header

Spring Cloud function cannot read function definition from Message header

我已经创建了一个基于 AWS Lambda 的 Spring 云函数,它具有多种功能,当我在 AWS Lambda 配置面板中定义一个“spring_cloud_function_definition”环境变量时,它工作正常。这些函数的输入和输出是 Message,因此负载和 http headers 也可以被访问 运行time。

我想在不同的 API 网关方法中使用这个 AWS Lambda 函数,例如:

https://cloud.spring.io/spring-cloud-static/spring-cloud-function/3.0.0.RC1/reference/html/spring-cloud-function.html#_function_catalog_and_flexible_function_signatures

我在 Spring.io 上找到了这个文档,它说它是可行的:

If the input argument is of type Message<?>, you can communicate routing instruction by setting one of spring.cloud.function.definition or spring.cloud.function.routing-expression Message headers. For more static cases you can use spring.cloud.function.definition header which allows you to provide the name of a single function (e.g., …​definition=foo) or a composition instruction (e.g., …​definition=foo|bar|baz)

因此以下测试事件应该 运行 在 AWS Lambda 中没有任何失败:

{ “方法”:“POST”, “body”:“{“键”:“值”}”, “headers”:{ "spring.cloud.function.definition": "saveItem" } }

但当然会抛出异常:

 No function defined: java.lang.IllegalStateException
 java.lang.IllegalStateException: No function defined
    at org.springframework.cloud.function.context.AbstractSpringFunctionAdapterInitializer.apply(AbstractSpringFunctionAdapterInitializer.java:187)
    at org.springframework.cloud.function.adapter.aws.SpringBootRequestHandler.handleRequest(SpringBootRequestHandler.java:51)
    at org.springframework.cloud.function.adapter.aws.SpringBootApiGatewayRequestHandler.handleRequest(SpringBootApiGatewayRequestHandler.java:140)
    at org.springframework.cloud.function.adapter.aws.SpringBootApiGatewayRequestHandler.handleRequest(SpringBootApiGatewayRequestHandler.java:43)

我尝试了很多配置(application.properties、AWS Lambda env 属性、header 等)但没有任何反应:

可能是什么问题?在这种情况下最好的配置是什么?如有任何帮助,我们将不胜感激!

使用的技术:

我已经更新到 v3.1.3 并切换到 FunctionInvoker,并且我已经将函数定义添加到请求模板映射 header,并且工作正常。

无论如何,感谢您的帮助。 :)