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

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

  • curl localhost:8080/uppercase -H "Content-Type: text/plain" -d 'Мой ввод текста'
  • curl localhost:8080/нижний регистр -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 'Мой вводимый текст'

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

Вопрос:

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
806
1

Ответы 1

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

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

Вы можете запустить это в AWS Lambda. Для меня это отлично работает, пока у меня в банке нет только одной функции. Я использовал «org.springframework.cloud.function.adapter.aws.SpringBootSt‌​reamHandler::handleR‌​equest» в качестве обработчика времени выполнения и указал одно из имен функций в переменных среды для «spring_cloud_function_definition».

Mayank Madhav 22.08.2021 05:02

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