两年前在公司开始负责一个底层api的项目。包含功能很简单,对接底层系统进行封装,提供一些功能实现的封装,对外提供http restful接口。主要要求是支持高并发和高稳定性。最开始的选型是用一些轻量级的http server框架。然后集成spring、mybatis等传统框架实现,后来了解了一个叫做Vert.x的nio框架。进行尝试并且经过了漫长的适应期之后。本喵只有一句话。Vert.x即是正义!
What(is Vert.x)
Eclipse Vert.x is a tool-kit for building reactive applications on the JVM.1
Who(to use Vert.x)
Vert.x是一个相对比较新技术。主要的资料来源还是Vert.x的官网。国内陆续也有大量的Vert.x用户。各个社交平台也有一些交流群等。
本喵学习使用Vert.x框架满打满算差不多13个月左右,目前使用Vert.x搭建一个相对稳定的框架投入生产使用。目前还有大量的问题。做这网站的目的,主要是整理一下学习Vert.x的过程,再次详细分析一下Vert.x以及具体的使用方法。达到对Vert.x更加深入的了解。主要以自己搭建的单个项目的框架展开。能力一般水平有限。一边分析,一边改进,希望看到这篇文章的大家能多多提出建议。
本喵在学习Vert.x的过程中,对于无力问题的解决方案主要来源于几个地方:
- Vert.x 官网。
- Vert.x 粉丝群。
Why(to use Vert.x)
Vert.x是一个基于JVM、轻量级、高性能的应用平台,非常适用于最新的移动端后台、互联网、企业应用架构。基于netty的nio全异步架构,Vert.x能够非常简单提供高并发,高扩展性的服务架构。
Vert.x的优点:
- 同时支持多种编程语言
目前已经支持了Java、JavaScript、Ruby、Python、Groovy、Clojure、Ceylon等。对程序员来说,直接好处就是可以使用各种语言丰富的LIB,同时也不再为编程语言选型而纠结 - 异步无锁编程
Vert.x提供了十分友好的异步无锁编程,在实际编码过程中使用由框架提供的各种异步实现方便快捷。比如查询数据库jdbcClient.query("select * from user", result -> { if (result.succeeded()) { ResultSet result = result.result(); //....... } else { logger.error("select error:" + result.cause().getMessage()); //...... } }); - 对于各种IO的异步支持
目前Vert.x的异步模型已支持TCP、UDP、FileSystem、DNS、EventBus、Sockjs等; - 非常方便的分布式支持
基于EventBus事件总线的消息机制,每个模块都是一个绝对独立的项目。轻松编写出分布式解藕应用。 - 生态圈日益丰富
本喵使用最初接触Vert.x较晚,截止这遍博客,Vert.x已发布3.5正式版。Vert.x已经有了相对非常完善的基于异步驱动的Data access(Postgres、MySQL、MongoDB、Redis)、Microservices、MQTT、Authentication等模块。
接下来本喵主要会列举一下本喵在项目中实际的用法和遇到的一些问题。更多的资料还是推荐大家查看官方文档和源码分析。(部分更新内容文档描述可能不太实时,所以当时踩了无数的喵爪坑)。