Как предоставить несколько конечных точек функций с помощью Spring Cloud Function? - PullRequest
1 голос
/ 18 марта 2019

У меня есть базовое Spring Cloud Function приложение с двумя объявленными функциями «нижний регистр» и «верхний регистр».Если я создаю приложение как обычное @ SpringBootApplication и аннотирую обе функции как @ Beans (функциональные компоненты), все работает отлично.Обе функции доступны через отдельные конечные точки HTTP, и я могу вызывать функции через:

  • curl localhost: 8080 / uppercase -H "Content-Type: text / plain" -d«Мой вводимый текст»
  • curl localhost: 8080 / строчные буквы -H «Тип содержимого: текст / обычный текст» -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-компонентов в функции initialize .

Вопрос:

Есть ли способ снова вызвать обе функции через их выделенные конечные точки: localhost: 8080 / uppercase и localhost: 8080 / строчные ?

1 Ответ

0 голосов
/ 19 марта 2019

Оказалось, что это на самом деле недостающий функционал в функциональной форме Spring Cloud Function.Теперь он реализован в версии 2.1.0.M1.

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

...