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

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

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

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

它在内部调用“uppercase”函数,无论 initialize 函数中 Bean 的注册顺序如何。

问题:

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

最佳答案

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

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

关于java - 如何使用 Spring Cloud Function 公开多个函数端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55220143/

相关文章:

java - 在整个测试套件中加载一次 bean

java - 运行所有测试用例后的 DefaultRollback

java - 如何在 zuul/ribbon 中获取请求将转发到的服务器的主机名

具有离散值的 Java for 循环

java - Gradle Spring Boot Devtools : developmentOnly and runtimeClasspath

java - 找不到合适的创建者方法来反序列化 JSON 字符串

java - 我应该如何获取 javafx spring boot 桌面应用程序的 OAuth2 访问 token ?

spring-cloud - Feign 重试是否需要某种配置?

java - Firebase 实时数据库 long 值始终返回 0,即使它不是

java - 在 show() 之前预加载 JavaFX 阶段