我使用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);
请注意,cloudFoundryClient
是ReactorCloudFoundryClient
实例,因为最新的库不支持与过时的代码一起使用的客户端类。我想使用最新的库执行所有操作(启动/停止/重新启动)。上面的代码不起作用。
这里有几件事...
使用基于反应堆的客户端,您对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()
第二件事是它是.applicationId
而不是applicationName
。您需要传递应用程序guid,而不是名称。照原样,您将得到一个404提示该应用程序不存在。您可以使用客户端来获取GUID,也可以改为使用CloudFoundryOperations
(请参阅#3)。
CloudFoundryOperations
interface is a higher-level API。通常,它更易于使用,并且支持诸如基于名称而不是guid启动应用程序之类的操作。
Ex:
CloudFoundryOperations
希望有帮助!