如何使用 Spring Cloud Function 公开多个函数端点?

Posted

技术标签:

【中文标题】如何使用 Spring Cloud Function 公开多个函数端点?【英文标题】:How to expose multiple function endpoints with Spring Cloud Function? 【发布时间】:2019-03-18 11:17:02 【问题描述】:

我有一个基本的 Spring Cloud Function 应用程序,其中包含两个声明的函数“小写”和“大写”。如果我将应用程序创建为普通的 @SpringBootApplication 并将两个函数都注释为 @Beans (功能性 bean),那么一切正常。这两个函数都通过单独的 HTTP 端点公开,我可以通过以下方式调用函数:

curl localhost:8080/大写 -H "Content-Type: text/plain" -d 'My 输入文字' curl localhost:8080/小写 -H "Content-Type: text/plain" -d '我的输入文本'

现在我将应用程序的主类转换为“函数形式”以缩短应用程序启动时间(如官方文档中的建议:http://cloud.spring.io/spring-cloud-function/multi/multi__functional_bean_definitions.html):

@SpringBootConfiguration
public class LambdaMicroserviceApplication implements ApplicationContextInitializer<GenericApplicationContext> 

    public Function<String, String> uppercase() 
        return String::toUpperCase;
    

    public Function<String, String> lowercase() 
        return String::toLowerCase;
    

    public static void main(String[] args) 
        FunctionalSpringApplication.run(LambdaMicroserviceApplication.class, args);
    

    @Override
    public void initialize(GenericApplicationContext context) 
        context.registerBean("uppercase", FunctionRegistration.class,
            () -> new FunctionRegistration<>(uppercase())
                    .type(FunctionType.from(String.class).to(String.class)));
        context.registerBean("lowercase", FunctionRegistration.class,
            () -> new FunctionRegistration<>(lowercase())
                    .type(FunctionType.from(String.class).to(String.class)));
    

问题:

现在只有 一个 单个端点直接暴露在根路径:

curl localhost:8080/ -H "Content-Type: text/plain" -d '我的输入文本'

它在内部调用“大写”函数,而不考虑 initialize 函数中 bean 的注册顺序。

问题:

有没有办法通过它们的专用端点再次调用 both 函数:localhost:8080/uppercaselocalhost:8080/lowercase

【问题讨论】:

【参考方案1】:

原来这其实是Spring Cloud Function的函数形式中缺少的一个功能。它现在在 2.1.0.M1 版本中实现。

见:https://github.com/spring-cloud/spring-cloud-function/issues/293

【讨论】:

你能在 AWS Lambda 中运行它吗?对我来说,这很好,直到我的罐子里只有一个函数。我使用“org.springframework.cloud.function.adapter.aws.SpringBootStreamHandler::handleRequest”作为运行时处理程序,并为“spring_cloud_function_definition”提供了环境变量中的函数名称之一

以上是关于如何使用 Spring Cloud Function 公开多个函数端点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring-Cloud 中将 ConsulDiscoveryClient 与 Zuul 和 Sidecar 一起使用

如何配置 spring-cloud-gateway 以使用 sleuth 记录请求/响应正文

spring cloud config如何使用本地属性覆盖远程属性

spring cloud config:如何使用多个配置

spring cloud数据流API.1.7.3中如何使用dataflowtemplate

我们如何在 Spring MVC 项目中使用 Spring Cloud Sleuth?