Vert.x Guide重构Vert.x服务 译<五>

TIP:java

这部分相应的代码在step-3文件夹中(https://github.com/vert-x3/vertx-guide-for-java-devs)git

以前的重构是咱们从初始构建向前的一大步,咱们使用event bus的消息机制抽取了独立可配置的verticles,并且咱们也看到能够部署多个verticles实例来更好应对负载和利用cpu内核。github

在这个章节,咱们将看到怎么设计和使用Vert.x服务,设计服务的主要优点能够面向接口编程,而后把服务暴露出来,咱们也能够用代码生成工具来处理event bus的消息机制,来替换咱们以前章节介绍的那样来本身手动编写的部分。数据库

咱们将会重构代码,使用不一样的包路径:编程

io.vertx.guides.wiki将包含主要的verticle,io.vertx.guides.wiki.database是数据库verticle和service,io.vertx.guides.wiki.http是Http 服务 verticle。数组

Maven配置修改微信

第一,咱们先把下面两个依赖包加入到咱们项目中,尤为咱们须要 vertx-service-proxy Apis:异步

咱们须要Vert.x代码生成模块,而且只是编译时依赖(provided scope)maven

而后咱们须要调整maven-compiler-plugin配置来使用code generation,这是经过一个javac注解的操做:ide

注意到自动生成的代码在src/main/generate路径下,而后一些集成开发环境好比IntelliJ IDEA 会自动加入到项目的classpath。

固然经过更新maven-clean-plugin来删除这些生成的文件:

TIP:

完整的文档关于Vert.x在http://vertx.io/docs/vertx-service-proxy/java/ 能够看到

 

数据库服务接口

定义一个服务接口就像定义其余的java接口是同样的,还须要咱们包含可使生成的代码能够工做的规则,和保证在Vert.x其余的交互代码正确。

开始咱们定义下面的接口:

    1.ProxyGen注解用来触发自动生成服务的客户端链接代理。

    2.Fluent注解是可选的,可是容许Fluent接口能够返回服务的实例,这对代码生成是很是有用的当服务被其余的JVM语言消费的时候。

   3.参数类型能够是String,java基础数据类型,JSON类型或者数组,任何枚举类型或者java.util collection (List / Set / Map) 。使用任意java类的方法是把它做为Vert.x数据对象,使用@DataObject注解,最后使用其余类型的就是服务应用类型。

    4.既然服务提供异步的结果,服务方法的最后一个参数须要是Handler<AsyncResult<T>>,使用泛型T来适配任何自动的生成的代码类型。

建立服务的实例和在event bus 的client代理的好的实践是提供static方法,咱们定义了简单的实现类和它的构造函数:

 Vert.x code generator建立的proxy类带有VertxEBProxy前缀,proxy类的构造方法须要一个Vert.x context对象和event bus地址。

NOTE:

以前的SqlQuery和ErrorCodes是内部类,如今抽取出来,是package-protected类型。

 

数据库 service implementation

以前的WikiDatabaseVerticle实现直接提供了一个端口,如今最重要的不一样是构造方法中支持异步的结果handler(报告初始化输出)和他的服务方法(报告操做成功)。

下面是类的代码:

在proxy代码工做的最后一步:服务所在的包须要package-info.java指出定义的Vert.x模块。

 

从数据库verticle开放数据库服务

数据库的操做代码多数移到WikiDatabaseServiceImpl中,WikiDatabaseVerticle如今包含两个方法:start方法用来注册服务和一个工具方法来加载SQL语句:

    1.在这注册服务

WikiDatabaseServiceVertxEBProxy用来接收event bus来的消息,而后转发到WikiDatabaseServiceImpl。而后就想咱们前面的操做同样:消息经过sction header发送调用某个特定的方法,参数被编码成JSON格式。

 

获取数据库 service proxy

最后的步骤重构Vert.x是修改 HTTP server verticle获取数据库service proxy,而且使用它在handler中取代event bus。

第一,咱们须要在verticle开始的时候建立proxy:

    1.咱们须要确认WikiDatabaseVerticle使用相同的event bus地址

而后,咱们须要用数据service的请求替换event bus请求

WikiDatabaseServiceVertxProxyHandler处理转发调用event bus消息。

TIP

Vert.x service 没有直接处理消息,而是被proxys去消费event bus的消息。

 

 

原文连接:http://vertx.io/docs/guide-for-java-devs/

个人微信公众号:

相关文章
相关标签/搜索