Spring Cloud函数无法从Message标头读取函数定义



我创建了一个基于AWS Lambda的Spring Cloud函数,它有多个函数,当我只定义一个";spring_ cloud_function_definition;AWS Lambda配置面板中的环境变量。这些函数的输入和输出是消息<gt,因此负载和http头也可以在运行时访问。

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

  • /item[POST]->应调用saveItem
  • /项目[DELETE]->应该调用deleteItem
  • 。。。等等

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上找到了这个文件,上面说它是可行的:

如果输入参数的类型为Message<gt;,您可以通过设置spring.cloud.function.definition或spring.loud.function.routing-expression消息头之一来传达路由指令。对于更多的静态情况,您可以使用spring.cloud.function.definition标头,它允许您提供单个函数的名称(例如…​definition=foo(或组合指令(例如…​definition=foo|bar|baz(

因此,以下测试事件应在AWS Lambda中运行,不会出现任何故障:

{"方法":"POST";,"身体":"{"键":"值"}";,"标题":{"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等(,但都没有成功:

  • spring.cloud.function.routing expression=headers.function_name
  • 设置spring.cloud.function.definition=saveItem

可能是什么问题?在这种情况下,最佳配置是什么?任何帮助都将不胜感激!

使用的技术:

  • 云:AWS
  • 云组件:Lambda+API网关
  • AWS Lambda处理程序类:org.springframework.cloud.function.adapter.AWS.SpringBootApiGatewayRequestHandler
  • AWS Lambda输入和输出事件:APIGatewayProxyRequestEvent,APIGatewayProxy ResponseEvent
  • Java:8
  • Spring Cloud功能版本:3.0.6.RELEASE

我已经更新到v3.1.3并切换到FunctionInvoker,并且我已经将函数定义添加到请求模板映射头中,它运行得很好。

无论如何,谢谢你的帮助。:(

相关内容

  • 没有找到相关文章

最新更新