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

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

  • curl localhost: 8080 / uppercase -H "Тип содержимого: текст / обычный" -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 "Тип содержимого: текст / обычный" -d "Мой вводимый текст"

Он вызывает функцию "верхнего регистра" внутри, независимо от порядка регистрации бинов в функции инициализации.

Вопрос:

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

1 ответ

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

Смотрите: https://github.com/spring-cloud/spring-cloud-function/issues/293

Другие вопросы по тегам