Vert.x

Java 微服务开发框架
授权协议 Apache
开发语言 Java
所属分类 程序开发、 高性能网络开发库
软件类型 开源软件
地区 不详
投 递 者 杜河
操作系统 跨平台
开源组织 Eclipse
适用人群 未知
 软件概览

Vert.x 是一个微服务开发框架,基于事件和异步,依托于全异步Java服务器Netty,并扩展了很多其他特性,以其轻量、高性能、支持多语言开发而备受开发者青睐,开发者可以通过它使用 JavaScript、Ruby、Groovy、Java、甚至是混合语言来编写应用。

概念

  • Vert.x是事件驱动的,其处理请求的高性能也是基于其事件机制。Vert.x的事件机制中有几个非常重要的概念:Event Loop、Event Loop Vertical、Worker Vertical、Event Bus、Vert.x Module。
  • Event Loop:即事件循环,是由Vert.x启动的事件处理线程,也是Vert.x项目对外开放的入口,Vert.x由此接收请求事件。一个Vert.x有一个或多个事件循环线程组成,线程最大数量为主机有效的CPU核数。
  • Event Loop Vertical:事件的业务处理线程,存在于Event Loop中,用于处理非阻塞短任务。
  • Worker Vertical : 事件的业务处理线程,用于处理长任务阻塞任务。
  • Event Bus:即事件总线,是Vert.x事件模型中最核心的部分,所有的事件都经由事件总线进行分发,包括Vertical之间的通信事件。
  • Vert.x Module : Vert.x项目模块,一个应用通常由多个模块组成,每个模块一般包含多个Vertical。

事件模型流程

Vert.x以非阻塞IO的思想来实现高性能,非阻塞IO的实现,基于Event Loop Vertical和Worker Vertical的分离,在Vert.x中,Event Loop用于接收,并将短业务操作交由其内部的Vertical来处理,该模块是非阻塞的,这样可以保证请求的处理效率;阻塞任务通过Vert.x的事件机制脱离当前线程,转移到Worker Vertical中执行,并执行结果返回给Event Loop Vertical。 这一过程完成的核心是Event Bus,Event Bus中注册了所有的事件,通过事件匹配完成事件转移和结果返回,从而将整个流程衔接起来。

Vert.x启动时,会将Worker Vertical的事件处理函数加载到Event Bus,当一个HTTP请求发送到Vert.x构建的应用时,Event Loop首先接收到请求,并对请求做分析、包装,然后将事件交给Event Bus来处理,Event Bus为此次请求事件添加一个事件ID,然后根据注册的Worker Vertical事件寻找已经注册的监听函数,若未找到则会抛弃该事件,若找到则会对处理类进行实例化,并同时使用事件ID在Event Bus中注册一个返回结果处理事件,该事件为Event Vertical类型。下一步由Worker Vertical实例执行事件处理函数,事件处理函数中通常包含业务处理、数据库操作等。Worker Vertical实例处理结束后,将返回结果和事件信息返回给Event Bus,Event Bus找到在其中注册的Event Vertical实例,然后将返回数据交给该实例处理,Event Vertical实例进一步处理数据并将结果返回给浏览器。

数据传递

事件驱动的处理过程,数据传递是非常重要的,Vert.x支持任意对象的数据格式。但使用对象时经常会遇到序列化和载入类的问题,比如在使用Java对象的时候,这种情况下使用JSON会更方便,这也是Vert.x推荐采用的方式。

特点

Vert.x的事件模型,有如下几个特点:
1.非阻塞处理请求,异步执行阻塞程序,保证了请求处理的高效性。
2.使用Event Bus事件总线来进行通讯,可以轻松编写出分布式、松耦合、高扩展性的程序。
3.使用Event Bus事件总线是Vert.x真正实现了多语言支持的基础,已支持Java、JavaScript、Ruby、Python、Groovy、Clojure、Ceylon。

Vert.x 中文文档

如下代码展示了 Web 服务器是如何通过 Vert.x 来处理静态文件的:

// JavaScript
load('vertx.js')
vertx.createHttpServer().requestHandler(function(req) {
  var file = req.path === '/' ? 'index.html' : req.path;
  req.response.sendFile('webroot/' + file);
}).listen(8080)

# Ruby
require "vertx"
Vertx::HttpServer.new.request_handler do |req|
  file = req.uri == "/" ? "index.html" : req.uri
  req.response.send_file "webroot/#{file}"
end.listen(8080)

// Groovy
vertx.createHttpServer().requestHandler { req ->
  def file = req.uri == "/" ? "index.html" : req.uri
  req.response.sendFile "webroot/$file"
}.listen(8080)

// Java
import org.vertx.java.core.Handler;
import org.vertx.java.core.http.HttpServerRequest;
import org.vertx.java.deploy.Verticle;
public class Server extends Verticle {
  public void start() {
    vertx.createHttpServer().requestHandler(new Handler() {
      public void handle(HttpServerRequest req) {
        String file = req.path.equals("/") ? "index.html" : req.path;
        req.response.sendFile("webroot/" + file);
      }
    }).listen(8080);
  }
}
  • 1.vert.x简介 vert.x 采用类似 Node.js 的 eventloop callback 机制,优势是 Eventloop 是单线程场景下几乎是最快的并发解决方案,但也需要周边生态的支持,比如 DbClient/HttpClient 这些跟 IO 打交道的 API 需要支持异步回调的风格,社区干脆就整合或者自己实现了。依赖注入的类库可以用 Guice,整体启动时间大概是同规模 spr

  • 最近在给Vert.x 4.x版本和3.5.0版本做监控探针的需求,应leader的要求,回顾总结一下Vert.x的一些技术点,包括但不限于和tomcat,springcloud的对比云云。 首先,谈一下做这个需求得到的一些技术上的提升和处理问题解决方法的提升还有事后诸葛亮对当时处理问题不够机智的一些反思。 1.反思: Vert.x做为一个不温不火的一个框架,要写Vert.x的测试demo以及是用户

  • 注意:这大部分是Java特有的-需要语言特有的调用方法 如果没有获得Vertx对象,Vert.x做不了什么。 Vertx对象是 Vert.x 的控制中心,几乎可以做所有事,包括创建客户端和服务器,获取引用到事件总线(event bus)、 设置计时器等。 所以怎么获得Vertx实例? 如果已经嵌入了 Vert.x,然后只需创建一个实例,如下所示: Vertx vertx = Vertx.vertx

  • Vert.x Web 介绍以及与Spring Boot的区别 我们都知道Spring系列是目前比较流行的JavaWeb框架,在微服务盛行的当下SpringBoot更是成为了几乎霸主的地位。确实,SpringBoot免去了繁琐的配置并内置了tomcat,可以独立运行,很符合微服务的特性,并在后来有了SpringCloud相关组件的加持使得Spring的地位更加稳固。 它的有点有很多,但是当我们只有一

  • java vert.x 如果您是Java程序员,则很有可能您过去曾经使用JavaScript,或者在不久的将来会使用JavaScript。 它不仅是最流行(也是最有用)的编程语言之一,了解一些JavaScript功能可以帮助您构建下一个超级受欢迎的Web应用程序。 服务器上JavaScript 在服务器上运行JavaScript的想法并不新鲜; 实际上,在1995年12月,发布用于浏览器JavaS

 相关资料
  • Mooa 是一个为 Angular 服务的微前端框架,它是一个基于 single-spa,针对 IE 10 及 IFRAME 优化的微前端解决方案。 Mooa 概念 Mooa 框架与 Single-SPA 不一样的是,Mooa 采用的是 Master-Slave 架构,即主-从式设计。 对于 Web 页面来说,它可以同时存在两个到多个的 Angular 应用:其中的一个 Angular 应用作为主

  • 本文向大家介绍微服务哪些框架相关面试题,主要包含被问及微服务哪些框架时的应答技巧和注意事项,需要的朋友参考一下 Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点。阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm 捐赠给 Apache 并加入 Apache 基金会等,为中国互联网人争足了面子,使得阿里巴巴在国人眼里已经从电商升级为一

  • 本文向大家介绍详解.NET Core+Docker 开发微服务,包括了详解.NET Core+Docker 开发微服务的使用技巧和注意事项,需要的朋友参考一下 .NET Core发布很久了,因为近几年主要使用java,所以还没使用过.NET Core,今天正好有一个c#写的demo,需要做成服务,不想再转成java来实现,考虑使用.NET CORE来尝下鲜,目标是开发一个微服务,然后部署到Dock

  • 本文向大家介绍C#微信开发(服务器配置),包括了C#微信开发(服务器配置)的使用技巧和注意事项,需要的朋友参考一下 小编对微信开发颇感兴趣,查阅了网上相关文章进行整理,方便大家一起学习。 1、注册帐号--填写服务器配置 在https://mp.weixin.qq.com/ 微信公众平台上注册帐号; 服务号是公司申请的微信公共账号,订阅号是个人申请的,个人权限比较少; 登录微信公众平台官网后,在公众

  • ketchup 是一个基于 dotnet core 的微服务框架。网关:兼容 kong,rpc:grpc支持远程调用。

  • Adnc 是一个轻量级的 .Net Core 微服务开发框架,同时也适用于单体架构系统的开发。支持经典三层与DDD架构开发模式、集成了一系列主流稳定的微服务配套技术栈。

  • Seata 的事务上下文由 RootContext 来管理。 应用开启一个全局事务后,RootContext 会自动绑定该事务的 XID,事务结束(提交或回滚完成),RootContext 会自动解绑 XID。 // 绑定 XID RootContext.bind(xid); // 解绑 XID String xid = RootContext.unbind(); 应用可以通过 RootCon

  • 在单体架构时,因为服务不会经常和动态迁移,所有服务地址可以直接在配置文件中配置,所以也不会有服务发现的问题。但是对于微服务来说,应用的拆分,服务之间的解耦,和服务动态扩展带来的服务迁移,服务发现就成了微服务中的一个关键问题。 服务发现分为客户端服务发现和服务端服务发现两种,架构如下图所示。 这两种架构都各有利弊,我们拿客户端服务发现软件Eureka和服务端服务发现架构Kubernetes/SkyD