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

时间:2019-03-18 11:17:02

标签: java spring spring-cloud serverless spring-cloud-function

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

  • curl localhost:8080 / uppercase -H“内容类型:文本/纯文本” -d'我 输入文字'
  • curl localhost:8080 / lowercase -H“内容类型: 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“内容类型:文本/纯文本” -d'我的输入文本'

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

问题:

是否可以通过其专用端点再次调用两个函数: localhost:8080 / uppercase localhost:8080 / lowercase

1 个答案:

答案 0 :(得分:0)

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

请参阅:https://github.com/spring-cloud/spring-cloud-function/issues/293