Cloud Foundry Java客户端–流事件

Cloud Foundry Java客户端提供了基于Java的绑定,用于与正在运行的Cloud Foundry实例进行交互。 这个项目的优点之一是它采用了基于Reactive Stream的API作为方法签名,特别是使用Reactor实现,这在使用流数据时特别有用。

在这篇文章中,我想展示一个真正使该库发挥作用的特定用例-在Cloud Foundry的流事件中

Loggregator是Cloud Foundry中的子系统,负责汇总系统内产生的所有日志,并提供了将该信息流式传输到外部系统的方式。 Loggregator中的“流量控制器”组件公开了基于Websocket的端点,这些端点流出了这些事件,Cloud Foundry Java客户端抽象了基础的websocket客户端连接详细信息,并提供了一种使用此信息的简洁方法。

作为前提条件,您将需要一个运行中的Cloud Foundry实例来试用该示例,并使它在本地运行的最佳方法是使用PCF Dev

假设您有一个正在运行的实例,使用cf-java-client库从代码连接到该实例的方式如下:

SpringCloudFoundryClient cfClient = SpringCloudFoundryClient.builder()
                .host("api.local.pcfdev.io")
                .username("admin")
                .password("admin")
                .skipSslValidation(true)
                .build();

使用此方法,可以通过以下方式创建流量控制器的客户端:

DopplerClient dopplerClient = ReactorDopplerClient.builder()
      .cloudFoundryClient(cfClient)
      .build();

基本上就是这样,多普勒客户端提供了流式处理基础事件的方法,如果您对所有未过滤的信息(适当地称为firehose)感兴趣,则可以通过以下方式进行:

Flux<Event> cfEvents = this.dopplerClient.firehose(
    FirehoseRequest.builder()
      .subscriptionId(UUID.randomUUID().toString()).build());

结果是Reactor库中的Flux类型封装了流数据,可以通过附加订户来观察流数据,例如,对于订户的基本示例,只需将事件以以下方式记录到控制台即可:

cfEvents.subscribe(e -> LOGGER.info(e.toString()));

但是, Flux的真正功能在于它提供的非常强大的流利方法,因此,例如,如果我对仅应用程序级日志的子集感兴趣,那么我实质上想过滤数据,从中提取日志并通过以下方式打印日志:

cfEvents
 .filter(e -> LogMessage.class.isInstance(e))
 .map(e -> (LogMessage)e)
 .map(LogMessage::getMessage)
 .subscribe(LOGGER::info);

如果您想使用此示例(作为附加奖励已启用了Spring Boot) ,请在github存储库中使用它

翻译自: https://www.javacodegeeks.com/2016/05/cloud-foundry-java-client-streaming-events.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值