实际的Reactor操作–检索Cloud Foundry应用程序的详细信息
CF-Java-Client是一個(gè)庫,可通過程序訪問Cloud Foundry Cloud Controller API 。 它建立在Project Reactor之上,它是Reactive Streams規(guī)范的實(shí)現(xiàn),并且使用此庫在Cloud Foundry環(huán)境中做一些實(shí)際的事情是一個(gè)有趣的練習(xí)。
考慮一個(gè)示例用例–給定一個(gè)應(yīng)用程序ID,我需要找到該應(yīng)用程序的更多詳細(xì)信息,該應(yīng)用程序的更多詳細(xì)信息以及組織和它所屬的空間的詳細(xì)信息。
首先,使用cf-java-client進(jìn)行所有API操作的基礎(chǔ)是一種毫不奇怪的類型,稱為CloudFoundryClient(org.cloudfoundry.client.CloudFoundryClient), cf-java-client的github頁面上包含有關(guān)如何獲取實(shí)例的詳細(xì)信息。這種類型的。
給定一個(gè)CloudFoundryClient實(shí)例,可以通過以下方式獲取給定ID的應(yīng)用程序的詳細(xì)信息:
Mono<GetApplicationResponse> applicationResponseMono = this.cloudFoundryClient.applicationsV2().get(GetApplicationRequest.builder().applicationId(applicationId).build());請(qǐng)注意,API返回一個(gè)反應(yīng)堆“ Mono”類型,這通常是cf-java-client的所有API調(diào)用的行為。
- 如果API返回一項(xiàng),則通常返回Mono類型
- 如果期望API返回多個(gè)項(xiàng)目,則返回Flux類型,并且
- 如果僅出于副作用而調(diào)用API –說打印一些信息,則它將返回Mono <Void>類型
下一步是從響應(yīng)中檢索空間標(biāo)識(shí)符,并進(jìn)行API調(diào)用以檢索空間的詳細(xì)信息,如下所示:
Mono<Tuple2<GetApplicationResponse, GetSpaceResponse>> appAndSpaceMono = applicationResponseMono.and(appResponse -> this.cloudFoundryClient.spaces().get(GetSpaceRequest.builder().spaceId(appResponse.getEntity().getSpaceId()).build()));在這里,我使用“ and”運(yùn)算符將應(yīng)用程序響應(yīng)與另一個(gè)返回空間信息的Mono組合在一起,結(jié)果是一個(gè)“ Tuple2”類型,它同時(shí)包含兩條信息:應(yīng)用程序詳細(xì)信息和空間的詳細(xì)信息在。
最后,檢索要在其中部署應(yīng)用程序的組織:
Mono<Tuple3<GetApplicationResponse, GetSpaceResponse, GetOrganizationResponse>> t3 =appAndSpaceMono.then(tup2 -> this.cloudFoundryClient.organizations().get(GetOrganizationRequest.builder().organizationId(tup2.getT2().getEntity().getOrganizationId()).build()).map(orgResp -> Tuples.of(tup2.getT1(), tup2.getT2(),orgResp)));此處, “ then”操作用于檢索上一步給出的ID的組織詳細(xì)信息,并將結(jié)果添加到先前的元組中,以創(chuàng)建包含“應(yīng)用程序詳細(xì)信息”,“空間詳細(xì)信息”和“組織詳細(xì)信息”的Tuple3類型”。 “ then”等同于Scala和ReactiveX世界中熟悉的flatMap運(yùn)算符。
這基本上涵蓋了您通常處理“ cf-java-client”庫的方式,并利用了它建立在出色的“ Reactor”庫及其非常有用的運(yùn)算符集合上的事實(shí),從而得出結(jié)果。 只是為了將結(jié)果轉(zhuǎn)換為與您的域更相關(guān)的類型的最后一步,并在處理過程中遇到的任何錯(cuò)誤:
Mono<AppDetail> appDetail = t3.map(tup3 -> {String appName = tup3.getT1().getEntity().getName();String spaceName = tup3.getT2().getEntity().getName();String orgName = tup3.getT3().getEntity().getName();return new AppDetail(appName, orgName, spaceName);}).otherwiseReturn(new AppDetail("", "", ""));如果您有興趣嘗試一個(gè)可行的示例,請(qǐng)?jiān)谖业膅ithub存儲(chǔ)庫中找到一個(gè)示例– https://github.com/bijukunjummen/boot-firehose-to-syslog
文章中顯示的代碼可在此處獲得 – https://github.com/bijukunjummen/boot-firehose-to-syslog/blob/master/src/main/java/io.pivotal.cf.nozzle/service/CfAppDetailsS??ervice .java
翻譯自: https://www.javacodegeeks.com/2016/12/practical-reactor-operations-retrieve-details-cloud-foundry-application.html
總結(jié)
以上是生活随笔為你收集整理的实际的Reactor操作–检索Cloud Foundry应用程序的详细信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux删除用户命令(linux 删除
- 下一篇: 使用ActiveMQ Artemis在两