浅说vertx
TRANSCRIPT
浅说 Vert.x胡键( @foxgem )
我是谁 入行时间
10+ 年 社区身份
GroovyQ ( www.groovyq.net)站长 西安社区组织者( OpenParty 、 QClub 西安)
个人兴趣 广泛……,目前专注于 vertx
联系方式 Twitter/ 微博: @foxgem 邮箱: [email protected]
什么是 Vert.x ? 文艺范儿的官方定义
Vert.x is a lightweight, high performance application platform for the JVM that's designed for modern mobile, web, and enterprise applications.
胡氏简化版 Node.js on JVM
典型的应用场景 vertx 缺省支持
Socket Server Http Server
WebSocket SockJS
典型应用 解析实时数据帧的通信
服务器 Web 服务器 向前端屏蔽后端数据源
位置的数据服务器 分布式消息处理器 ……
Vert.x 的若干关键词
简单
//典型的 Socket Server结构vertx.createNetServer() .connectHandler{ socket -> socket.dataHandler { buffer -> … }
socket.closedHandler { … }
socket.exceptionHandler { … }}.listen(1234)
Vert.x 的若干关键词
多语言
直接支持的语言 Java JavaScript Ruby Python Groovy
为新语言的支持提供了语言接口
Vert.x 的若干关键词
异步
非阻塞 建立于 Netty 之上
类 Actor 编程范式 事件
事件处理器 事件循环 事件总线
支持本地 / 分布式 publish ,发布 / 订阅 send ,点对点
Vert.x 的若干关键词 事件总线简单示例
发送端
接收端
eb = vertx.eventBus…eb.publish('out.client', repository.findAllClients())
eb.registerHandler('out.client', function(message) { that.total(message.total); that.clients.removeAll(); for (var i = 0; i < message.total; i++) { that.clients.push(message.clients[i]); }; });
Vert.x 的若干关键词
WebSocket
开箱即用的WebSocket 支持
支持 SockJS 考虑到 WebSocket 的
兼容性问题,推荐以SockJS 为替代
支持 EventBus Bridge
Vert.x 的若干关键词
集群
基于 Hazelcast 命令
vertx run xxx -cluster 注意:若集群起在同一机器上时,
另一个集群实例的启动需要使用: -cluster-port
vertx run xxx -cluster -cluster-port 25501
Vert.x 的若干关键词
模块
运行单元: verticle vertx run verticle
复用单元:模块( Module ) Vert.x 的插件系统 模块亦可单独运行
vertx runmod mod
二者均支持动态部署 deployVerticle/undeployVerticle deployModule/undeployModule
Vert.x 应用的开发1. 建立工程
Vertx 应用即普通的 Java 工程
apply plugin: 'groovy'
vertxHome = '...'
repositories { flatDir dirs: "${vertxHome}/lib"}
dependencies { groovy localGroovy()
compile gradleApi() compile fileTree(dir: "${vertxHome}/lib", includes: ['*.jar']) runtime fileTree(dir: "${vertxHome}/lib", includes: ['*.jar'])
runtime files("${vertxHome}/conf")}
Vert.x 应用的开发2. 编写 Verticle (以 groovy 为例)
Verticle 的依赖类为普通 Java 类import org.vertx.groovy.core.buffer.Buffer
vertx.createNetClient().connect(1234, "localhost") { socket -> socket.dataHandler { buffer -> ... }
socket.closedHandler { ... }
...}
Vert.x 应用的开发3. 编译工程
4. 运行
小技巧 可使用 -instances 参数指定同时运行的 Verticle
的实例数,最大化利用 CPU 核数 Vertx 提供了 gradle 工程的应用模板
https://github.com/vert-x/vertx-gradle-template
gradle build
vertx run Server.groovy -cp ./build/libs/*.jar
开发经验 同步 -> 异步 分而治之,充分利用 Verticle 事件总线很方便,设计事件体系是关键
尤其是事件地址,专项专用 利用动态部署实现功能的动态增减 永远不要阻塞事件循环, IO 操作转移到 Worker
Verticle 例子 1 :
普通 Verticle -> 事件总线 -> Worker Verticle -> DB Server 例子 2
利用 Worker Verticle 实现连接池,在上例中部署多个 worker verticle 实例即可,每个 Worker 中保持与 DB 的连接
参考资料 官方站点: http://vertx.io/ Google vertx + 问题相关关键字