Как запустить приложение CloudFoun dry, используя ReactorCloudFoundryClient? - PullRequest
0 голосов
/ 10 марта 2020

Я использовал StartApplicationRequest для создания примера запроса на запуск приложения, как показано ниже:

StartApplicationRequest request = StartApplicationRequest.builder()
                .applicationId("test-app-name")
                .build();

Затем я использовал ReactorCloudFoundryClient для запуска приложения, как показано ниже:

cloudFoundryClient.applicationsV3().start(request);

Но мое тестовое приложение test-app-name не запускается. Я использую последнюю версию клиента Java CF (v4.5.0 RELEASE), но не вижу возможности запустить приложение.

Удивительно, но устаревшая версия , кажется, работает со следующим кодом:

cfstatus = cfClient.startApplication("test-app-name"); //start app

cfstatus = cfClient.stopApplication("test-app-name"); //stop app

cfstatus = cfClient.restartApplication("test-app-name"); //stop app

Я хочу сделать то же самое с последней клиентской библиотекой CF, но я не вижу никакой полезной ссылки. Я ссылался на тестовые случаи, написанные на официальном репозитории Github CloudFoun dry. Я получил следующий код после проверки большого количества документов:

StartApplicationRequest request = StartApplicationRequest.builder()
                    .applicationId("test-app-name")
                    .build();

cloudFoundryClient.applicationsV3().start(request);

Обратите внимание, что cloudFoundryClient является экземпляром ReactorCloudFoundryClient, так как последняя библиотека не поддерживает класс клиента, используемый с устаревшим кодом. Я хотел бы сделать все операции (запуск / остановка / перезапуск) с последней библиотекой. Приведенный выше код не работает.

1 Ответ

1 голос
/ 11 марта 2020

Несколько вещей здесь ...

  1. Используя клиент на базе реактора, ваш вызов cloudFoundryClient.applicationsV3().start(request) возвращает Mono<StartApplicationResponse>. Это не фактический ответ, это возможность одного. Вам нужно что-то сделать, чтобы получить ответ. Подробнее см. Здесь .

    Если вам нужно поведение, подобное оригинальному клиенту cf- java, вы можете вызвать .block() на Mono<StartApplicationResponse>, и он будет ждать и превращаемся в ответ.

    Пример:

    client.applicationsV3()
        .start(StartApplicationRequest.builder()
                    .applicationId("test-app-name")
                    .build())
        .block()
    
  2. Второе, что это .applicationId, а не applicationName. Вам нужно указать в приложении guid, а не имя. На самом деле вы получите 404, заявив, что приложение не существует. Вы можете использовать клиент для извлечения guid, или вы можете использовать CloudFoundryOperations вместо этого (см. # 3).

  3. Интерфейс CloudFoundryOperations - это высокоуровневый API . В целом проще в использовании и поддерживает такие вещи, как запуск приложения на основе имени вместо guid.

    Пример:

    ops.applications()
       .start(StartApplicationRequest.builder()
                 .name("test-app-name").build())
       .block();
    

Надеюсь, что это поможет !

...