响应式微服务 in Java 译<五> --Verticles—the Building Blocks

Verticles—the Building Blocksjava

Vert.x 给了你很大的自由空间来构建你的应用和代码,Vert.x也封装了语法糖来更方便的编写Vert.xy应用,一个简单的,可扩展的,actor-like部署和并发模型,Verticles是由Vert.x部署和运行的的代码块。一个应用,例如微服务,会在同一个时间,同一个 Vert.x 实例中运行大量的 Verticle实例,一个 Verticle建立服务端或者客户端,注册了一系列的Handlers,封装系统的业务逻辑的一部分。react

Regular verticles 在 Vert.x event loop 中执行而且不会被阻塞,Vert.x 确保每一个verticle老是被同一个线程执行而且不并发,从而避免了同步结构。在java中,verticle是一个类,继承了Abstract Verticle 类:数据库

Worker Verticle编程

不像regular verticles,worker verticles 不在event loop中执行,这就意味着他们能够执行阻塞的代码。然而,这限制你的可拓展性。微信

Verticles能够访问vertx member(AbstractVerticle类提供)来建立servers 和 clients,还有其余的verticles。Verticles 也能够部署其余的verticles,配置他们,设置实例的数字。实例也能够关联到不一样的event loop(multireactor模式的实现),Vert.x负责不一样实例之间的负载均衡。并发

From Callbacks to Observables负载均衡

正如你以前的章节所示,Vert.x开发模型使用了回调。当操做多个异步操做,这个回调函数为基础的发展模式,每每会产生复杂的代码。例如,咱们看一下如何从数据库读取数据,第一,咱们须要一个数据库链接,而后发送一个数据库查询请求,获取执行的结果,而后释放链接。全部的这些操做都是异步的。使用回调。你可能编写相似这样的Vert.x JDBC 客户端:异步

虽然即便可控,这个例子显示了回调会把你的代码快速变成不可读,所以你可使用 Vert.x futures函数

处理一些异步操做。不像Java Futures,Vert.x Futures 是非阻塞的,Futures提供了高度化的封装构建一系列的操做或者并行执行操做。下一段代码是比较有表明性的,咱们组装futures构建一系列的异步操做:微服务

无论怎样,Futures使代码变得更加易于理解,咱们把全部行放到一个批处理而且执行。这个结果能够是巨大的,须要大量的时间进行检索。与此同时,你并不需呀整个结果返回才开始执行。你能够根据获得的数据一行数据一个个依次执行。幸运的是,Vert.x 提供了一个为这种编程挑战提供了方案,提供一种方式,使用响应式开发模型来促进响应式微服务的编程开发,Vert.x 提供了 RxJava APIs:

  • 组合和协调异步任务

  • 传进来的消息做为输入流

让咱们用 RxJava APIs 重写先前的代码:

 

除了提升可读性,响应式编程容许你订阅结果流,尽快地执行它。使用 Vert.x,你能够选择你本身偏心的开发模型。在这份文档中,回调和RxJava都会使用。

原文地址:

https://developers.redhat.com/promotions/building-reactive-microservices-in-java/

有什么讨论的内容,能够发我微信公众号:

相关文章
相关标签/搜索