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


声明:本文转载自https://my.oschina.net/u/2277632/blog/1580629,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

TIP:

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

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

在这个章节,我们将看到怎么设计和使用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-compiler-plugin配置来使用code generation,这是通过一个javac注解的操作:

注意到自动生成的代码在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/

我的微信公众号:

本文发表于2017年11月28日 10:33
(c)注:本文转载自https://my.oschina.net/u/2277632/blog/1580629,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2458 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1