本文用来介绍Titan Framework,以及Titan Framework的简单使用。
Titan Framework是通过Actor模型使用响应式消息传输模式,提供具有高性能、高响应、高可伸缩和高韧性的并发应用框架。首先demo中有一个供外部调用的Controller接口,同时提供了一个调用其他微服务的handler方法,提供event方法接收微服务之间的调用,可以在event中进行redis操作, mongoDB,mysql等数据库的一些增删改查都可以在event中做。Titan Framework是支持多数据库驱动适配的。
Titan Framework的微服务工程标准包结构
在Titan Framework中,每个微服务的核心工程结构分为Controller、Entity、Event、Launch。
1. Controller包中又可以分割为两个具体逻辑组件,分别是具体实现API配置的Controller与进行接入层逻辑控制的Handler。对于Controller的Handler包,我们建议将一些接入层的检查放在这里,例如Token有效性或者Json参数的格式验证。
2. Entity包主要是本微服务中使用到的数据对象实体定义。例如,传统结构中的DTO定义就可以放在Entity文件夹下。
3. Event包是Titan微服务之间进行相互调用的入口,在Event文件夹下,我们常常放置EventHandler,专门用来提供跨微服务的通讯支持。例如,LoginService需要调用UserService进行用户信息校验。此时UserService就可以提供一个VerifyUserInformationEvent的内部接口,用来和LoginService进行跨微服务协作。对于Event包,我们建议将很多业务逻辑放在里面。
4. Launch包中主要是微服务启动参数的配置与启动器的配置。Titan Framework每个微服务内置Jetty容器,使用时无需单独部署其他容器。在启动时,Titan Framework的微服务直接通过类似Java Application的方式进行启动,即Java -jar serice.jar。
5. 在需要进行持久化的微服务中,我们会加入另外一个Repository包,让微服务包结构看上如下图:
Titan Framework已经完成了大家常见的关系型与非关系型数据库的驱动集成与读写分离模块集成,大家只需要进行少许配置即可投入使用。我们在后面会有专门关于数据库对接的介绍。
基于降低学习成本的原因,Titan Framework中集成了一部分Spring的组件,包括一些注释方式与配置方式。
每个Titan微服务的配置文件结构如下图:
可以看出,每个微服务的核心配置分为两个板块,分别是Titan专用的conf包与spring风格的配置包。对于Cluser.properties,是Titan Framework微服务集群建立的核心依据之一,主要是用来配置每个微服务的地址/端口以及集群其他机器的地址。详细的微服务集群配置,我们将在后面专门介绍。
如果大家希望对Titan微服务的标准包结构有更深入的了解,可以下载Titan Framework Demo。
在这里,我们假设有两个Titan微服务,其中A微服务作为API接入服务,B微服务作为业务逻辑处理服务。
A微服务与B微服务之间的通讯就是由上面说到的Event进行驱动。例如A可以在Controller的Handler主键中调用远程请求,将特定的Event发送给B微服务。B微服务通过EventHandler捕获这个特定的远程请求。
这里我们给出一个具体案例:
Login微服务承担[POST] https://{base_url}/login/weblogin的API接入,协议中要求传入的body参数如下:
{“userName”:”username_value”,”password”:”password_base64_pre_salt”}
其中salt通过临时令牌获取,由其他微服务负责提供支持。
Login服务在Controller中将会获取来自http post的登陆请求,并可以在对应的Handler中进行接入层的格式校验。在校验通过后,可以直接在Controller的loginHandler中请求UserService进行用户信息验证,即通过Titan Framework的Publish方法,发送一个VerifyUserEvent给B服务。
此时,Titan Framework将会在底层保障VerifyUserEvent被有效传递至B服务,即便B服务部署在另一个IDC机房中。
B服务将会在VerifyUserEventHandler中收到来自A服务的请求。在收到请求后,B服务器可以进行持久层数据比对,验证相关信息是否有效,最后给A服务返回协议约定的结果。
A服务收到B服务的反馈后,可以直接进行API层反馈,当然也可以按照业务需求,进一步封装后再通过API返回给远端。
第一步:构建整体项目Maven结构
我们建议按照下图结构设置整体项目的Maven结构。
具体POM文件内容可以参照titan framework demo中内容。
第二步:通过maven为各微服务模块建立eclipse项目(文档中以eclipse举例)
我们在子系统文件目录下通过mvn eclipse:eclipse建立各微服务的eclipse项目,然后通过mvn clean install装载对应依赖。依赖构建完成后,即可将对应微服务import至eclipse进行开发工作。
第三步:配置cluster参数与jvm运行参数
在cluster.properties中将local参数配置为开发机器的本地网卡IP地址,并配置一个本地不冲突的端口。
以Eclipse举例,在jvm启动参数中配置:-noverify。
第四步:启动微服务
参照titan framework demo中的launch包内容,设置启动器,并在spring风格的配置中设置启动类。
通过Java Application方式启动微服务即可。
第五步:访问API
通过Restful工具,调用http://{local_host}:7070/{path}/service即可。7070端口是Titan Framework每个微服务内置Jetty容器的默认端口号。
第六步:部署
Titan Framework的微服务可以打包成war或jar。具体生产级部署方式,我们将在后续的部署文档中详细说明。