你!学Java的,除了Spring你还知道什么
Vert.x
是什么
vert.x
是基于JVM,轻量级,高性能的应用平台。JVM
的Reactive
开发套件- 基于全异步
Java
服务Netty
- 同时支持多种编程语言
- 同步无锁编程
- 极好的分布式开发支持
Vert.x
为Java
中构建反应式微服务平台提供了整套工具包.包含Web
、Data access
、Reactive
、Microservices
、MQTT
、Authentication and Authorisation
、Integration
、Event Bus Bridge
、Devops
、Testing
、Clustering
、Services
等等
注意: Vert.x
不是一个框架,它只是一个工具包.
它的核心库定义了编写异步网络应用的基本API
,你可以为应用程序选择有用的模块(如数据库连接,监控,认证,日志,服务发现,集群支持等)
Vert.x
是支持多语言的。比如 java
, groovy
,scala
, kotlin
, javascript
, ruby
, ceylon
Vert.x
能做什么
-
Vert.x
适合做 简单的网络实用程序,复杂的现代web应用程序,Http/Https
微服务,大容量时间处理,全面的后端消息总线应用程序.
Vert.x
封装了Web
开发常用的组件, 支持路由,Session
管理,模板等.最重要的是,它不需要容器. -
Vert.x
被许多不同的公司用于从实时游戏到银行业务以及介于两者之间的所有事物。 -
TCP/UDP
开发,vert.x
基于Netty
. 提供了丰富的类库, 支持多种网络应用开发. 不需要处理底层细节.注重业务代码的编码即可。 -
提供了对
WebSocket
的支持,可以做聊天室,动态推送等. -
Event Bus
是Vert.x
的神经,可以通过Event Bus
实现分布式消息,远程方法调用等等. 也可以非常便捷的开发微服务应用. -
支持主流数据库和消息的访问.
-
分布式锁,分布式计数器,分布式
Map
的支持.
简单地与Spring进行下对比
项目 | Spring | Vertx |
---|---|---|
核心框架 | Spring-core | vertx-core |
web 开发 | Spring-webMvc | vertx-web |
jdbc 框架 | spring-jdbc | vertx-jdbc-client |
redis | spring-data-redis | vertx-redis-client |
微服务 | springCloud | vertx-hazelcast |
vert.x
有什么优势
Vert.x
是非常轻量的Vert.x
性能极高,运行和启动特别快Vert.x
不是应用程序服务器Vert.x
是创建轻量级,高性能服务器的理想选择.
Vert.x
中的相关概念
Verticle
Verticle
是Vert.x
部署和运行的代码块.
一个应用程序通常是由在同一个Vert.x
实例中同时运行的许多Verticle
实例组合而成。
Verticle
的类型
Stardand Verticle
: 永远运行在Event Loop
线程上, 是一类常用的Verticle
Worker Verticle
: 运行在Worker Pool
中的线程上, 一个实例绝对不会被多个线程同时执行。Multi-Thread Worker Verticle
: 运行在Worker Poll
中的线程上, 一个实例可以由多个线程同时执行(会有线程安全问题)
Standard Verticle
- 当
Standard Verticle
被创建时,它会被分派给一个Event Loop
线程,并在这个Event Loop
中执行它的start
方法。当您在一个Event Loop
上调用了Core API
中的方法并传入了处理器时,Vert.x
将保证用与调用该方法时相同的Event Loop
来执行这些处理器。 Verticle
中的所有代码都在相同的Event Loop
处理器中执行. 所以,使用单线程的方式去编写就可以了。
Worker Verticle
Worker Verticle
是由Worker Poo
l中的线程去执行的,它被设计来调用阻塞式代码,它不会阻塞任何Event Loop
. Worker Verticle
实例绝对不会在Vert.x
中被多个线程同时执行,但是它可以在不同时间由不同的线程执行.
通过 setWorker
方法来把 Verticle
设置成worker Verticle
,
如果不想使用Worker Verticle 来运行阻塞式代码,也可以在Event Loop 中使用内联阻塞式代码.
Multi-threaded Worker Verticle
Multi-threaded Worker Verticle
可以由不同的线程同时执行。这里要特别注意线程安全。
Event Bus
(事件总线)
Event Bus
负责Verticle
之间的通信.
[外链图片转存失败(img-3K8NrESQ-1567947562223)(./images/event-bus)]
事件总线允许传递任何类型的数据,然而 JSON
是首选的交换格式, 因为 它允许不同语言编写的Verticle
之间进行通讯,JSON
是一种流行的通用半结构化数据奉送处理文本格式.
消息可以发送到任意自由字符串组成的目的地. 事件总线支持以下通讯方式:
- 1.端到端的消息
- 2.请求–响应消息
- 3.发布,订阅用于广播消息.
事件总线允许Verticle
之间透明的通讯, 不只是在同一个JVM
进程中.
- 当网络集群启动是,事件总线都是分布式的,因为消息可以被发送到运行于其他应用节点的
Verticle
. - 事件总线可以通过一个简单的TCP协议访问,以便第三方应用进行通讯.
- 事件总线可以通过通用消息桥公开(
AMQP
,Stomp
) SockJS
桥接运行web应用通过运行在浏览器中的javaScript
与事件总线无缝通讯,与任何Verticle
一样接口与发布消息.
小结
vert.x
是什么?vert.x
是一堆工具包.vert.x
能做什么?web
,application
,聊天室,UDP/TCP
应用Vert.x
的相关概念verticle
以及三种Verticle
类型- 事件总线(
Event Bus
)
预告
[第一个Vert.x-web应用程序-Java版](#预告)