合买出售浅析java响应式编程(reactiveprogramming)

合买出售浅析java响应式编程(reactiveprogramming)

ID:28143346

大小:135.00 KB

页数:9页

时间:2018-12-07

合买出售浅析java响应式编程(reactiveprogramming)_第1页
合买出售浅析java响应式编程(reactiveprogramming)_第2页
合买出售浅析java响应式编程(reactiveprogramming)_第3页
合买出售浅析java响应式编程(reactiveprogramming)_第4页
合买出售浅析java响应式编程(reactiveprogramming)_第5页
资源描述:

《合买出售浅析java响应式编程(reactiveprogramming)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、响应式合买出售dsluntan.comQ:3393756370VX:17061863513编程是一种新的编程风格,它提供了一种基于事件驱动的方式来处理异步数据流的能力,其特点是允许开发人员构建事件驱动、可扩展性、弹性的响应式系统。响应式编程遵循观察者设计模式,该模式可以定义为:当一个事物发生状态变化吋,其他事物将被相应地通知和更新。因此,观察者不需要轮询事件的变化,而是异步等待事件变化的通知,所以观察者收到通知后就可以处理该事件。在这个过程屮,观察者是发生事件变化时执行的函数,而数据流是可以被观察到的实际可观测数据,也就是被观察者或者称作主题。几乎所有的语言和框架都在其生

2、态系统中采用了这种响应式编程方法,Java也紧跟时代步伐,在Java8中引入了响应式编程。现在响应式编程已经幵始渗透到Java8和JavaEE8版本的各个部分。Java8中引入了诸如CompletionStage及其实现,CompletableFuture等概念,这些类和概念在诸如JAX-RS的ReactiveClientAPI等规范中使用。JAX-RS客户端API接下来我们来看看如何在JavaEE8应用程序屮使用响应式编程。在开始本例之前,您需要熟悉基本的JavaEEAH。JAX-RS2.1引入了创建REST客户端的新方法,支持响应式编程。JAX-RS提供的默认调用者实

3、现是同步的,这意味着创建的客户端将阻塞对服务器端的调用。这个实现的例子如例一所示。例一Responseresponse=ClientBuilder.newClientO.target(’’http://localhost:8080/service-ur1z,).request0.get0;从JAX-RS2.0版本开始,JAX-RS为客户端提供了异步的支持,通过调用asyncO方法力客户端API创逮异步调用器,如例二所示。例二Futureresponse=ClientBuilder.newClient().target(”http://localhost

4、:8080/service-url").request().async().get0;在客户端上使用异步调用器时将返回Future类型的实例,泛型类型为javax.ws.rs.core.Response。这种方式可以通过调用future,get()来轮询响应,或者通过注册一个回调函数,当HTTP响应可用时将[H]调该方法。这两种实现方式都适用于异步编程,但是当你想嵌套回调函数或者在这些异步执行点添加控制条件时会使程序变得复杂。JAX-RS2.1提供了一种响应式的编程方式来解决这些问题。当用新的JAX-RS响应式客户端API来构建客户端时,只需要调用rx()方法就可以完成响

5、应式调用。在例三中,rx()方法返冋存在于客户端运行时的响应式调用者,并iL客户端返冋类型为CompletionStage.rx()的响应,通过此简单调用就可以实现从同步调用器切换到异步调用器。例三CompletionStageresponse=ClientBuilder.newClient().target(〃http://localhost:8080/service_url〃).request().rx()•get();CompletionStage是Java8中引入的一个新接口,它的名称意味着它可以作为大规模计算屮的一个阶段的计算。当我们得到响应

6、实例后,可以调用thenAcceptAsyncO方法,在该方法中我们可以提供自己的业务逻辑代码,当响应变为可用时,这些业务逻辑代码片段将异步执行,如例四所示。例四response.thenAcceptAsync(res->{Temperaturet=res.readEntity(Temperature,class);//dostuffwitht});响应式编程在服务端的应用响应式方法不仅局限于JAX-RS中的客户端;也可以在服务器端利用它。为了演示这一点,我们将首先模拟一个简单的场景,即我们可以从一个服务器端查询位罝列表。对于每个位罝,我们将用该位罝数据再次调用另一个服务

7、器端点以获取温度值。端点的交互如图1所示。阁1端点交互阁首先,我们定义域模型,然后定义每个域模型的服务。例五定义了Forecast类,它包装了Temperature和Location类。例五publicclassTemperature{privateDoubletemperature;privateStringscale;//getters&setters}publicclassLocation{Stringname;publicLocation(){}publicLocation(Stringname){this.name=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。