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返回一个反应堆“ 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

实际的Reactor操作–检索Cloud Foundry应用程序的详细信息相关推荐

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

    cloud foundry CF-Java-Client是一个库,可通过程序访问Cloud Foundry Cloud Controller API . 它建立在Project Reactor之上,它 ...

  2. travis-ci自动部署_如何使用Travis CI部署(几乎)零恐惧的Cloud Foundry应用

    travis-ci自动部署 by Robin Bobbitt 罗宾·波比(Robin Bobbitt) 如何使用Travis CI部署(几乎)零恐惧的Cloud Foundry应用 (How to d ...

  3. 微软加入了面向Java的Cloud Foundry

    在加利福尼亚州圣克拉拉举行的Cloud Foundry峰会上,微软宣布该公司已加入该Cloud Foundry Foundation成为黄金会员.加入一个开放源代码的平台即服务(PaaS)云供应商,主 ...

  4. cloud foundry_介绍“又一个” Cloud Foundry Gradle插件

    cloud foundry 在与两个同事(感谢Mark Alston和Dave Malone !)一起使用自动Jenkins管道部署Cloud Foundry应用程序的过程中,我决定尝试编写Gradl ...

  5. cloud foundry_将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法

    cloud foundry 如果要试用Cloud Foundry ,最简单的方法是下载出色的PCF开发人员或在Pivotal Web Services站点上创建试用帐户. 其余文章假定您已经安装了Cl ...

  6. 介绍“又一个” Cloud Foundry Gradle插件

    在与两个同事(感谢Mark Alston , Dave Malone !)一起使用自动Jenkins管道部署Cloud Foundry应用程序的过程中,我决定尝试编写Gradle插件来执行一些通常需要 ...

  7. spring roo_使用Spring Roo进行快速云开发–第2部分:VMware Cloud Foundry

    spring roo Spring Roo是在Java平台上提供快速应用程序开发的工具. 我已经解释了何时使用它: http : //www.kai-waehner.de/blog/2011/04/0 ...

  8. 使用Spring Roo进行快速云开发–第2部分:VMware Cloud Foundry

    Spring Roo是在Java平台上提供快速应用程序开发的工具. 我已经解释了何时使用它: http : //www.kai-waehner.de/blog/2011/04/05/when-to-u ...

  9. 将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法

    如果您想试用Cloud Foundry ,最简单的方法是下载出色的PCF开发人员或在Pivotal Web Services站点上创建试用帐户. 文章的其余部分假定您已经安装了Cloud Foundr ...

最新文章

  1. mysql innodb myisam 插入数据_mysql innodb换成myisam后插入数据变快?
  2. vue 定义全局弹框_VUE路由拦截:Vue自定义全局弹窗组件
  3. 30年前未曾发行的任天堂红白机游戏,被这个团队从21张软盘中重新恢复了,还是3D的...
  4. python opencv图片编码为h264文件
  5. php回调函数如何执行顺序,PHP回调函数调用方式
  6. 图解排序算法(四)之归并排序
  7. 「混合云四部曲」:变革、创新、加速、发展
  8. 开源GIS库GDAL/GEOS在Windows下的编译与 Codeblocks配置
  9. 【程序员感悟系列】 由一点业务说开去
  10. 9张图带你领略AI态势!
  11. mysql怎么绿化绿化_Windows下MySQL的绿化与精简
  12. Python入门--创建类的对象
  13. Java基础篇:什么是异常,异常处理的基础是什么?
  14. Masm(1):资源文件定义
  15. python实现cab文件解压
  16. android开发如何获取电话号码的归属地信息
  17. 库克将为斯坦福大学2019年毕业典礼致辞:6月16日举行
  18. 苹果a7处理器_苹果手机芯片为什么那么强,看看苹果A系列处理器的历史
  19. 信创引领丨呼叫中心加速适配国产化
  20. 秦安三中2021高考一成绩查询,喜报!天水一中、三中、五中2019年高考成绩来了!...

热门文章

  1. Mysql的安装与远程登录
  2. 【Java】continue和break区别
  3. 教学交流研讨会总结(一)
  4. HTML5表格简单应用案例之[招聘需求表]
  5. mybatis简单案例源码详细【注释全面】——实体层(User.java)
  6. 块元素与行内元素转化(display属性)
  7. mysql根据注释搜索表
  8. 旅游系统_数字洛江智慧旅游系统助力提升旅游安全水平
  9. 框架写mysql插入为空_学习springMVC框架配置遇到的问题-数据写入不进数据库时的处理办法...
  10. mysql事务基础+基于innodb的行锁+间隙锁+如何锁定行