Vert.x及响应式编程

2020-08-05  本文已影响0人  Kevin_Tsang

1. 关于Vert.x

1.1 Vertx是什么

在学习Vert.x前一定要看看官网给他的定位

Eclipse Vert.x is a tool-kit for building reactive applications on the JVM.

所以,我们必须首先搞清楚,Vertx不是类似Spring的那一套大而全的框架或者管理对象的容器、工厂

尽管我们不能期待它承担一个完整的项目脚手架的角色,但是麻雀虽小,五脏俱全,作为一个工具集,它包含web服务器应用(其中又包含对http协议、http2、序列化及反序列化、验证、鉴权等的支持)、数据库客户端、服务通信组件等模块,我们可以根据需要自行组合他们

其中的Vertx core是底层组件,它基于Netty构建而成,其中的核心概念有:

1.2. Vertx的特点
event loop

Vertx使用event loop机制处理业务逻辑,这种架构模式提高了系统资源利用率,可以确保处理主业务的线程不会被浪费在等待I/O的结果上,但要做到这些,我们必须更改编码风格,将对I/O结果的处理逻辑用回调的形式一并传递给event loop,Vertx将在action1完成时主动调用我们注册的回调函数

我们的代码将由之前的

result1 = action1()
action2(result1)

变为

action1(
  result1 -> 
      action2(result1)
)

这种代码结构在Vertx项目里随处可见。显然,一旦逻辑变得复杂,多重函数的嵌套将导致回调地狱,Vertx为提供了Promise类解决这种问题,通过传递Promise对象,我们可以以同步的方式处理异步的逻辑。

private Future<Void> action() {
  Promise<void> promise = Promise.promise();
  // (...)
  return promise.future();
}

Vertx4.0承诺所有的异步API都将具有Promise返回值。另外,也可以使用Rxjava以流的方式处理数据

2.响应式编程

Don't call us,we'll call you.

响应式的编程范式其实就是设计模式中“观察者模式”的一种实践

我们在设计代码结构(或设计项目架构)时,并不直接地针对某个具体业务给出方案,而是分析业务涉及到的各个角色,并对思考他们自身在项目中的地位以及他们之间的联系,最后构建出各个模块

重点考虑模块是如何与其他模块达到松耦合的:

构建一套响应式系统使得系统间各模块协作更为自然,代码健壮性更高

如果不使用第三方框架,单纯自行设计这一套系统的成本是巨大的,仅考虑线程间的同步问题就够喝一壶的了,更不用说如何去满足业务需求

3.工具的使用

但是理想中完美的东西未必能在现实中发我们所预期作用

作为一个贯彻响应式编程思维的工具集,Vertx提供了一整套完善的响应式系统,它对几乎所有一般项目中的业务需求提供了解决方案,但它终究不是一个具有工程属性的重量级框架,例如数据库相关组件仅仅是在原生驱动的基础上提供了一层极薄封装

需要做“规范化”的工程时,使用这样的工具集我们不免陷入“再造轮子”的困境,所以,在项目开始初期时,需要结合多方面因素考虑,选择适合项目的工具,以达到工具的“为我所用”的目的

上一篇下一篇

猜你喜欢

热点阅读