如何使用ReactorCloudFoundryClient启动CloudFoundry应用程序?

问题描述 投票:0回答:1

我使用StartApplicationRequest创建了一个示例请求来启动应用程序,如下所示:

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

然后,我使用ReactorCloudFoundryClient启动应用程序,如下所示:

cloudFoundryClient.applicationsV3().start(request);

但是我的测试应用程序test-app-name尚未启动。我正在使用最新的Java CF客户端版本(v4.5.0 RELEASE),但没有找到启动应用程序的方法。

非常令人惊讶的是,outdated version似乎正在使用以下代码:

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客户端库执行相同的操作,但是我看不到任何有用的参考。我提到了在CloudFoundry官方Github存储库中编写的测试用例。在检查了许多文档之后,我得出了以下代码:

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

cloudFoundryClient.applicationsV3().start(request);

请注意,cloudFoundryClientReactorCloudFoundryClient实例,因为最新的库不支持与过时的代码一起使用的客户端类。我想使用最新的库执行所有操作(启动/停止/重新启动)。上面的代码不起作用。

java cloudfoundry pivotal-cloud-foundry
1个回答
1
投票

这里有几件事...

  1. 使用基于反应堆的客户端,您对cloudFoundryClient.applicationsV3().start(request)的调用将返回Mono<StartApplicationResponse>。那不是实际的反应,只是一种可能。您需要做一些事情以获得响应。 See here for more details

    如果您想要与原始cf-java-client类似的行为,可以在.block()上调用Mono<StartApplicationResponse>,它将等待并变成响应。

    Ex:

    client.applicationsV3()
        .start(StartApplicationRequest.builder()
                    .applicationId("test-app-name")
                    .build())
        .block()
    
  2. 第二件事是它是.applicationId而不是applicationName。您需要传递应用程序guid,而不是名称。照原样,您将得到一个404提示该应用程序不存在。您可以使用客户端来获取GUID,也可以改为使用CloudFoundryOperations(请参阅#3)。

  3. CloudFoundryOperations interface is a higher-level API。通常,它更易于使用,并且支持诸如基于名称而不是guid启动应用程序之类的操作。

    Ex:

    CloudFoundryOperations

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.