# RxApiServer **Repository Path**: spirit_demon/RxApiServer ## Basic Information - **Project Name**: RxApiServer - **Description**: 基于Vert.x+Guice构建restful Api服务框架 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 3 - **Created**: 2017-03-08 - **Last Updated**: 2022-04-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于Vert.x+Guice构建restful Api服务框架 ## 介绍 ### Vert.x是一个用于下一代异步、可伸缩、并发应用的框架,旨在为JVM提供一个Node.js的替代方案。开发者可以通过它使用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。 ### Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。 #### Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter方法)进行注入。 #### Guice采用Java加注解的方式进行托管对象的配置,充分利用IDE编译器的类型安全检查功能和自动重构功能,使得配置的更改也是类型安全的。 #### Guice提供模块对应的抽象module,使得架构和设计的模块概念产物与代码中的module类一一对应,更加便利的组织和梳理模块依赖关系,利于整体应用内部的依赖关系维护, #### 而其他IOC框架是没有对应物的,此外,借助privateModule的功能,可以实现模块接口的明确导出和实现封装,使得支持多数据源这类需求实现起来异常简单。 ## 特点 #### Java构建REST的方案有很多种,开源的也有很多,经典的有SSH ,spring+springmvc+mybatis等等,struts和spring曾经是构建web服务最常用组合。 #### 随着node.js异步编程工具出现 ,异步处理大行其道,在java语言中vert.x应该是最接近node.js处理模式,无疑给不愿意搞js语法的java程序员带来福音。 #### Web框架开发的趋势也由早期的 tomcat ,jboss 依赖容器的web应用,走向以嵌入式http服务器的java应用,当下流行处理方案例如 SpringBoot。 #### 伴随着netty框架日趋成熟,基于netty的构建高性能http后端的方案越来越多. vert.x以netty作为底层通信核心,提供了性能保障。 #### 以Vert.x+Guice+MyBatis替换Spring+Springmvc+MyBatis的组合,提供给学习Vert.x,guice案例参考,同时给尝试营造全新restful服务的开发人员提供一个崭新的思路。 ## 感谢 * vertx * guice * mybatis * guava * rxjava * gradle ## 运行部署 #### 修改resources 目录下 mybatis-config.xml数据库参数 #### gradle build来构建jar