Vertx 初体验
Posted Johnny屋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vertx 初体验相关的知识,希望对你有一定的参考价值。
Vertx 初体验
最近在研究 Vertx ,很久前就注意过 一直没有去尝试 ,这次抽空折腾了一下,下面记录一下 折腾的内容,以便后续回顾
概念
Vertx 最大的特点就是 异步(底层基于Netty) ,通过事件循环(EventLoop)来调起存储在异步任务队列(CallBackQueue)中的任务,大大降低了传统阻塞模型中线程对于操作系统的开销。因此相比较传统的阻塞模型,异步模型能够很大层度的提高系统的并发量。
Vert.x除了异步之外,还提供了非常多的吸引人的技术,比如EventBus,通过EventBus可以非常简单的实现分布式消息,进而为分布式系统调用,微服务奠定基础。除此之外,还提供了对多种客户端的支持,比如Redis,RabbitMQ,Kafka等等 ,后续会写一些关于Vertx MQ kafka 等的文章
Vertx 能做什么
上面引用了别人说了一堆的话,其实我们都很关心 它到底能干嘛
Java能做的,Vert.x都能做。主要讨论,Vert.x善于做哪些事情!
(1)Web开发,Vert.x封装了Web开发常用的组件,支持路由、Session管理、模板等,可以非常方便的进行Web开发。不需要容器!不需要容器!不需要容器!
(2)TCP/UDP开发,Vert.x底层基于Netty,提供了丰富的IO类库,支持多种网络应用开发。不需要处理底层细节(如拆包和粘包),注重业务代码编写。
(3)提供对WebSocket的支持,可以做网络聊天室,动态推送等。
(4)Event Bus(事件总线)是Vert.x的神经系统,通过Event Bus可以实现分布式消息,远程方法调用等等。正是因为Event Bus的存在,Vert.x可以非常便捷的开发微服务应用。
(5)支持主流的数据和消息的访问 redis mongodb rabbitmq kafka 等
(6)分布式锁,分布式计数器,分布式map的支持
1. 快速体验
你可以从官网是直接 创建项目然后 通过Idea 打开
我这里通过 idea 创建 gradle 功能 去构建 一个Vertx 入门demo
1.1 引入gradle 依赖
build.gradle 中添加下面依赖 3.9.3 最新版本 直接搞最新的玩
compile 'io.vertx:vertx-core:3.9.3'
1.2 编写入口类
可以看到 非常的简单,不需要 容器,和其他任何依赖 一个 http服务就搭建好了
/**
* @author johnny
* @create 2020-10-14 下午7:43
**/
public class VertxDemo {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
//直接创建 服务器
vertx.createHttpServer()
.requestHandler(requestHandler -> {
//获取到 Response 直接返回消息
requestHandler.response().end("Hello Vertx !!!");
})
//监听在 8899 端口
.listen(8899);
}
}
访问 http://localhost:8899
可以看到 返回了 Hello Vertx!!!
2.Vertx 支持多种编程语言
Vert.x有一个口号大概是:“我们不去评判那个编程语言更好,你只要选择你想要使用的语言就可以了”。也就是说,在Vert.x上,可以使用javascript,Java,Scala,Ruby等等,下面是官网的一个截图
3.不依赖中间件
Vert.x的底层依赖Netty,因此在使用Vert.x构建Web项目时,不依赖中间件。像Node一样,可以直接创建一个HttServer。就像我们上面第一个例子,可以直接运行main方法,启动一个Http服务,而不需要使用类似于Tomcat的中间件。不依赖中间件进行开发,相对会更灵活一些,安全性也会更高一些。
4.完善的生态
Vert.x和Spring的对比,有一种使用MacOS和Windows对比的感觉。Vert.x和庞大的Spring家族体系不同,Vert.x提供数据库操作,Redis操作,Web客户端操作,NoSQL数据库的一些操作等常用的结构,很清新,很简洁,但足够使用。下面是从官网截取的一个提供的客户端工具。
5.Vertx 技术体系
5.1 核心模块
Vertx-core 核心模块 如HTTP,TCP,文件系统访问,EventBus、WebSocket、延时与重复执行、缓存等其他基础的功能
5.2 web模块
提供路由 Session Rest 等等 专门开发 Web 的工具集
5.3 数据访问模块
可以集成 Myql MongoDB Cassandra 等等
5.4 Reactive 响应式编程
5.5 整合其他模块 (Redis RabbitMQ Kafka 等等)
5.6 认证与授权
Vert.x提供了简单API用于在应用中提供认证和授权。
Auth common 通用的认证API,可以通过重写AuthProvider类来实现自己的认证
JDBC auth 后台为JDBC的认证实现
JWT auth 用JSON Web tokens认证实现
Shiro auth 使用Apache Shiro认证实现
MongoDB auth MongoDB认证实现
OAuth 2 Oauth2协议认证实现
htdigest auth 这个是新增一种认证的支持
5.7 微服务
Vert.x提供多个组件构建基于微服务的应用程序。
比如服务发现(Vert.x Service Discovery)、断路器(Vert.x Circuit Breaker)、配置中心(Vert.x Config)等。
总结
本篇主要 简单介绍了下 Vertx ,并且提供一个 简单的入门 demo , 随着Spring5.0 WebFlux 等 异步非阻塞技术,未来一定是 异步非阻塞的天下, 所以我们要做好准备 迎接变更。。。后续会出 关于Vertx-Web 模块的 路由的介绍。
参考 https://blog.csdn.net/king_kgh/article/details/80772657
以上是关于Vertx 初体验的主要内容,如果未能解决你的问题,请参考以下文章