cloud foundry_实际的Reactor操作–检索Cloud Foundry应用程序的详细信息

cloud foundry

CF-Java-Client是一个库,可通过程序访问Cloud Foundry Cloud Controller API 。 它建立在Project Reactor之上,它是Reactive Streams规范的实现,并且使用此库在Cloud Foundry环境中做一些实际的事情是一个有趣的练习。

考虑一个示例用例–给定一个应用程序ID,我需要找到该应用程序的更多详细信息,该应用程序的更多详细信息以及组织和它所属的空间的详细信息。

首先,使用cf-java-client进行所有API操作的基础是一种毫不奇怪的类型,称为CloudFoundryClient(org.cloudfoundry.client.CloudFoundryClient), cf-java-client的github页面上包含有关如何获取实例的详细信息。这种类型的。

给定一个CloudFoundryClient实例,可以通过以下方式获取给定ID的应用程序的详细信息:

Mono<GetApplicationResponse> applicationResponseMono = this.cloudFoundryClient
  .applicationsV2().get(GetApplicationRequest.builder().applicationId(applicationId).build());

请注意,API返回一个React堆“ Mono”类型,这通常是cf-java-client的所有API调用的行为。

  • 如果API返回一个项目,则通常返回Mono类型
  • 如果期望API返回多个项目,则返回Flux类型,并且
  • 如果仅出于副作用而调用API –说打印一些信息,则它将返回Mono <Void>类型

下一步是从响应中检索空间标识符,并进行API调用以检索空间的详细信息,如下所示:

Mono<Tuple2<GetApplicationResponse, GetSpaceResponse>> appAndSpaceMono = applicationResponseMono
  .and(appResponse -> this.cloudFoundryClient.spaces()
    .get(GetSpaceRequest.builder()
      .spaceId(appResponse.getEntity().getSpaceId()).build()));

在这里,我使用“ and”运算符将应用程序响应与另一个返回空间信息的Mono组合在一起,结果是一个“ Tuple2”类型,它同时包含两条信息:应用程序详细信息和所处空间的详细信息在。

最后,获取要在其中部署应用程序的组织:

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的组织详细信息,并将结果添加到先前的元组中,以创建包含“应用程序详细信息”,“空间详细信息”和“组织详细信息”的Tuple3类型”。 “ then”等同于Scala和ReactiveX世界中熟悉的flatMap运算符。

这基本上涵盖了您通常处理“ cf-java-client”库并利用它建立在出色的“ Reactor”库及其非常有用的运算符的集合上的事实,从而得出结果的事实。 只是为了将结果转换为与您的域更相关的类型的最后一步,并在处理过程中遇到任何错误:

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("", "", ""));

如果您有兴趣尝试一个工作示例,请在我的github存储库中找到一个示例– 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

cloud foundry

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值