从零开始学习Vert.x

又到了周末了,可以好好休息一下,虽然手上事情也不多,不过每天都还是邀加班到9点,自己没事就倒腾点其他事情,比如说学用git啊这些!因为任务就那么多,上周开发快递100接口,查看物流信息业务。有现成的Demo,基本直接拿来用就可以了,感觉没什么意思!还有一件特别尴尬的事情,甲方选择的快递公司快递100不支持!据说钱都付了。我看了下快递100目前支持的快递国内和国外的总共800多家,但是bose选择的是一个上海的小快递公司,官网都没用,更不要说查询物流信息了!!!!唉,也是醉了,看明天PM怎么解决这个问题吧

其实本来想学习一下Node的课程的,环境也搭建好了,感觉原生的js水平不够,这个有空我还是再过一遍原生的js,其实自己用的时候还是一jquery为主,毕竟都是DOM操作,没那么多其他业务,所以放弃了Node,重新捡起了以前放弃的vert.x,其实去年底就了解过这方面的知识,但是当时水平差太多了(其实现在也差),看着感觉很吃力,所以就放弃了。关于vert.x我这里就不介绍了,它就是eclipse基金会搞的一个开源的项目,eclipse大家肯定知道了!目前支持的语言还是很多的,java、kotlin、scala、javaScript、ruby等等。如果不了解vert.x的小伙伴网上搜索一下,多看一点相关的博客或者技术文章。官网地址:https://vertx.io/。

vert.x要求java JDK版本至少为1.8,因为它涉及到很多函数式、lambda相关的内容,所以如果你还没有学习这方面的内容或者不是很熟悉的话,建议补充下相关知识。以前自己放弃就有这方面的因素,所以自己后来专门自己打印了一般java1.8函数式编程相关的书籍。今天重新开始看这部分的知识其实还是有点吃力,vert.x内容也是相当的丰富!但是它和spring又不一样,按照官网的那句话:Eclipse Vert.x is event driven and non blocking. This means your app can handle a lot of concurrency using a small number of kernel threads. Vert.x lets your app scale with minimal hardware.对就是事件驱动且非阻塞,支持高并发、需要更少的内核线程,并且对硬件要求也低。当然spring现在也在朝这个方向努力,比如最新的webFlux。

vert.x主要包括几个部分:core核心包,主要是一些基础功能的支持,比如http、tcp以及系统文件访问和其他一些特性;Web包,web包主要是构建web项目和微服务需要用到的工具包;dataAccess包,这个是和数据库交互的包,关系型和非关系型数据库都有很好的支持,关系型数据库目前只有mysql和postgresql客户端,其他的需要依赖JDBC,非关系型redis、mongoDB;此外还有Reactive、Microservices、Authentication and Authorisation,这里面Reactive自己基本不了解。

vert.x官方文档还是比较全的,也有列子!此外也有官方文档的中文翻译:https://vertxchina.github.io/vertx-translation-chinese/start/Start.html。当然还是建议多看英文文档,结合谷歌翻译插件还是很方便的。

今天自己就从hello world开始vert.x的学习,官网支持vert.x项目的下载

只需要指定版本并选择所需要的依赖就可以了,然后下载,解压,导入到idea就可以了,当然也完全可以自己新建项目然后自己添加依赖。因为是第一个vert项目,所以我选择了第一种方式!另外因为需要对数据库访问,所以添加了mysql的jar包,整个项目的pom文件:

打开我们的项目我们发现在项目目录下已经给我们生成了一个MainVerticle.java类,这一点和springboot为我们生成Application.java很相似。但是不同的是这个MainVerticle.java并不是我们程序启动的入口,这一点看我们的pom文件也可以看出来,我们想输出是一个fat.jar。下面我们先看下vert.x自动创建项目生成的代码。

MainVerticle继承了AbstractVerticle类,并重写了start()方法,只看逻辑的话应该是没问题的,就是由vertx创建一个http服务,用来响应用户的请求,响应头设置的content_type为“text/plain”,即纯文本形式,响应的内容就是“Hello from Vert.x!”,监听的端口号是8080。当然看到代码确实可以理解,但是真要自己写还是感觉有点难,代码写好了,那么我们应该怎么启动呢?上面说了这个项目输出会是一个fat.jar,这样就可以和当初学springboot一样通过命令行启动。先使用maven打成fat.jar

通过控制台终端,输入:java -jar firstVert-1.0.0-SNAPSHOT-fat.jar启动,看到命令行输出后,我们到浏览器输入localhost:8080

还有一种方式就是通过java的main函数启动,在项目下新建一个Main.java

然后启动main,这时候访问浏览器和上面那种方式的结果是一样的。

上面的代码中MainVerticle继承了AbstractVerticle,并重写了无入参的start()方法,现在我们使用另一种方式,重写有入参的start()方法。通常我们访问页面的时候是先查询数据库,然后将数据传递给前台页面,进行渲染展示的。

所以这次我们先获取数据库连接,连接成功后再创建httpServer。带入参的start方法携带的参数为Future,future我的理解就是异步的作用(不知道这样对不对,就是一个信号,提示操作是否成功,如果成功..失败..)。把刚才的代码注释掉,重写一个带入参的start()方法:

这里先使用JDBC客户端获取数据库的连接,如果成功后创建httpServer并设置相关信息。如果失败则是不会创建httpServer的。在startHttpServer()方法内,我们新建一个router,它可以路由多个地址,比如我的代码里面路由地址是“/index”,也就是只处理这个一个请求,或者也可以指定get、post、head请求方式。这里做简单了解就好了httpServer请求的处理器又router接收用户请求并路由到相关的路径上去,监听端口号依然是8080。

大概理清这个逻辑以后我们启动一下,我这里就选择main方法启动了。从输出可以知道我们的数据库肯定连接成功了,不然不会执行到startHttpServer()方法

然后我们浏览器访问一下:localhost:8080未找到资源,说明我们的访问路径有问题,再次访问localhost:8080/index:

说明我们的路由设置也是成功的。

如果我将数据库的密码改一下,也就是我不能连接数据库的话,我们看看startHttpServer()方法还会不会执行。

可以看出startHttpServer()没有执行,且抛出了异常信息,用户访问需要密码,因为密码是错的。

通过这个很小的项目来看,感觉vert.x还是比较难的,和以往的web有很大的不同,而且很多基础的概念都还需要理解,只能后面慢慢学习,因为自己水平有限,如果有错误的地方,请大家指正!!!谢谢~~~~~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180806G01NL000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券