如何使用Spring Cloud Function公开多个功能端点?

问题描述 投票:1回答:1

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

  • curl localhost:8080 / uppercase -H“Content-Type:text / plain”-d'我的输入文本'
  • curl localhost:8080 / lowercase -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'我的输入文本'

它在内部调用“大写”函数,而不管初始化函数中bean的注册顺序如何。

题:

有没有办法通过专用端点再次调用这两个函数:localhost:8080 / uppercase和localhost:8080 / lowercase?

java spring spring-cloud serverless spring-cloud-function
1个回答
0
投票

事实证明,这实际上是Spring Cloud Function功能形式中缺少的功能。它现在在2.1.0.M1版本中实现。

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

© www.soinside.com 2019 - 2024. All rights reserved.