这款高并发应用框架实在太好用了,伙伴们你造吗?

Titan 框架开发快速入门

Titan Framework是通过Actor模型使用响应式消息传输模式,提供具有高性能、高响应、高可伸缩和高韧性的并发应用框架。

支持平台

GNU/Linux是产品开发和运行的平台。 Titan已在有2000个节点的GNU/Linux主机组成的集群系统上得到验证。

Win32平台是作为开发平台支持的。

所需软件

Linux和Windows所需软件包括:

JavaTM1.8.x,必须安装,建议选择Sun公司发行的Java版本。

数据库(基于业务系统开发需要)

Ø MySQL 5.x以上

Ø Redis 3.x 以上

Ø MongDB 3.x以上

Ø HBase 2.7.x以上

入门实例

CQRS本身是一个非常简单的模式。它只规定了处理命令的应用程序的组件应该与处理查询 的组件分离。虽然这种分离本身非常简单,但它与其他模式结合时提供了许多非常强大的功能。Titan Framework 提供的构建块更容易实现不同的模式与CQRS的结合。

上图左侧显示的是UI组件, 通过 两种方式与应用程序的其余部分进行交互:它向应用程序发送命令 (显示在顶端的部分), 并从应用程序中查询信息 (显示在底端的部分)。

Command(命令)通常用简单的对象表示,这些对象包含命令处理器执行所需的所有数据。一个命令通过它的名字来表达它的意图。在Java术语中,这意味着使用类名来确定需要做什 么,命令的字段提供了执行该操作所需的信息。

Command Bus接受命令并路由它们到命令处理器(Command handler) 。每个命令处理器响应特定类型的命令,并根据命令的内容执行逻辑。 然而,在某些情况下,你也希望不顾实际的命令类型去执行逻辑,如验证、日志或权限。

Command handler(命令处理器)从仓储中恢复领域对象(聚合)并执行方法来改变它们的状态。这些聚合通常包含真实的业务逻辑并负责维护自身的不变性。聚合的状态变化导致了领域事件的产生,领域事件和聚合都从领域模型中来。

Repositories(仓储)负责提供访问聚合。通常情况下,这些仓储的优化设计是仅通过其唯一标识符来查找聚合。一些仓储将存储聚合自身的状态(例如,使用对象关系映射,ORM), 而另一些则存储聚合的状态的更改到Event Store中,仓储还负责对其备份数据库中的聚合进行更改。

API定义

Titan Framework 针对RESTful f风格基于Spring MVC 进行结构封装,将请求转化为对应系统的Command(CreateCommand、PutCommand、DeleteCommand、PatchCommand、GetCommand),因此针对API的定义 只需要面向接收到的请求进行对象的转换,并返回相应的Command 。

@RestController

@RequestMapping("/demo")

publicclassTplAppControllerextendsFunctionalController {

/** 自定义方法 **/

@RequestMapping(value = "/tpl/type", method = RequestMethod.POST)

publicString doType(@RequestParam("typecode") String typeCode) {

System.out.println("Tpl App run function DOTYPE :" + typeCode);

Result result = runEnvironment.run(newTplAppTypCommand(newTplAppType()));

return"ok" + result.toString();

}

/** 系统默认 GET方法**/

@Override

protectedCommand getGetCommand(String serviceName, String id) {

TplAppEntity appEntity =newTplAppEntity(id);

returnnewGet(appEntity);

}

/** 系统默认 PUT方法 **/

@Override

protectedCommand getPutCommand(String serviceName, String id, String body) {

TplAppEntity tplAppEntity = JsonParserFactory.getParser().getObject(body, TplAppEntity.class);

returnnewUpdate(tplAppEntity);

}

/** 系统默认POST方法**/

@Override

protectedCommand getCreateCommand(String serviceName, String body) {

TplAppEntity tplAppEntity = JsonParserFactory.getParser().getObject(body, TplAppEntity.class);

returnnewCreate(tplAppEntity);

}

/** 系统默认POST方法**/

@Override

protected Command getCreateCommand(String serviceName, T body) {

returnnull;

}

/** 系统默认PATCH方法**/

@Override

protectedCommand getPatchCommand(String serviceName, String id, String body) {

returnnull;

}

/**系统默认DELETE方法**/

@Override

protectedCommand getDeleteCommand(String serviceName, String id) {

returnnull;

}

/**系统默认GET方法**/

@Override

protectedCommand getQueryCommand(String serviceName, Object queryObject) {

returnnull;

}

}

注:

1.系统默认接收Json body ,基于JsonToEntity模式进行对象转换,调用方法如下:

JsonParserFactory.getParser().getObject(body, TplAppEntity.class);

Command Handler定义

CommandHandler 是用来响应来至API(Controller的部分的请求),基于类上的注解在启动时自动完成handler与Command的注册过程。

@CmdHandler

publicclassTPlAppTypeHandlerimplementsCommandHandler> {

@Inject

TplAppRepository tplAppRepository;

@Override

publicResult handle(TplAppTypCommand cmd) {

TplAppDomain tplAppDomain =this.tplAppRepository.loadTo();

tplAppDomain.doTestApp();

returnnewResult(200,true);

}

}

Repository定义

publicinterfaceTplAppRepository {

TplAppDomain saveTo(TplAppDomain o);

TplAppDomain loadTo();

}

@Component

publicclassJpaTplAppRepositoryextendsDomainRepositoryimplementsTplAppRepository {

@Override

publicTplAppDomain saveTo(TplAppDomain o) {

returnthis.saveTo(o);

}

@Override

publicTplAppDomain loadTo() {

this.load("testid");

}

@Override

protectedString getTName() {

}

}

Deploy定义

Titan Framework 基于Maven进行项目管理,业务功能开发完成后,只需要单独定义Deploy并基于maven将业务功成引入,并在additionalLauncher中初始化业务代码,MVN编译后即可发布进行测试。

publicclassKitaTplApplicationextendsLaunchFrontApplication {

publicstaticvoidmain(String[] args) {

KitaTplApplication app =newKitaTplApplication ();

app.getDefLauncher().exec(args);

additionalLauncher.exec(args);

}

staticLaunchPlugin additionalLauncher = (args) -> {

//DeployConfig.inited(TplConfig.props, args);

};

}

注: 1)多节点启动,服务间会自动建立集群关系,节点间基于Event事件进行相互的访问;

2)更多关于节点的配置参考详细功能说明;

3)事件定义参考如下Event定义;

Event 定义

异步事件处理可以在应用处理的任何部分产生,可以是本地的事件处理或者是其他服务节点提供的事件处理(在集群中自动完成负载、路由)。可以是由结果的调用(有效时间内),也可以是以通知的方式。

publicclassTplEventextendsDomainEvent {

.....

static public TplEvent generate(){

return new TplEvent() ;

}

}

Event Handler 定义

EventHandler 是对Event的响应处理,通过注释定义该Handler的访问路径Path=App.Role.Service ,在集群运行是可以直接通过该路径进行异步事件处理。

@EvtHandler(Role = "kita", Service = "tpl", App = "")

publicclassTplEventHandlerimplementsEventHandler {

@Override

publicvoidhandle(E event) {

TplEvent evt = (TplEvent)event ;

Result result = ResultStatus.Ok;

...

Feedback.Content(evt, result);

}

}

Publish Event

Publish 提供如下模式

针对本App服务提供的EventHandler可基于Event Class 进行发送,调用如下

Result r = Publish.Send(Ways.Local(TplEvent.generate())).Retry();

另一种调用模式是基于事件路径(在集群中自动完成路由)

Result r = Publish.Send(Ways.Remote("kita.tpl", TplEvent.generate())).Retry();

其他的Pip及Parallel访问请参考详细功能说明

本文来自企鹅号 - KITA媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

【依葫芦画瓢】SSM-CRUD-3

继续上一篇的讲解【依葫芦画瓢】SSM-CRUD --- 2 概要: 服务端返回json数据,构建员工列表 完成员工新增功能 增加表单前后端校验(jQuery+J...

2795
来自专栏流柯技术学院

Tomcat中JVM内存溢出及合理配置

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应...

722
来自专栏大闲人柴毛毛

手把手0基础项目实战(三)——教你开发一套电商平台的安全框架

写在最前 本文是《手把手项目实战系列》的第三篇文章,预告一下,整个系列会介绍如下内容: 《手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(S...

4195
来自专栏北京马哥教育

linux 内存耗尽的分析

在测试NAS性能,用fstest长时间写,分析性能变差的原因,发现server主机内存使用率很高。 1.首先查看内存 # top -M top - 14:...

4516
来自专栏玄魂工作室

Hacker基础之Linux篇:基础Linux命令十六

今天我们来学习几个小知识,不一定是Linux的命令,都是用于查看Linux的系统信息的

1303
来自专栏FreeBuf

深入解析新型加密货币挖矿恶意软件ZombieBoy

延续了2018年加密货币挖矿恶意软件的趋势,我发现了另一种类似于5月初发现的“MassMine”的挖矿恶意软件。我把这个家族称为ZombieBoy,因为它使用了...

842
来自专栏向治洪

基于xmpp聊天室实现,国外牛人作品

XMPP的官网:http://xmpp.org/ 测试帐号注册:https://register.jabber.org PC端下载地址注册之后就会看到下载地址 ...

2915
来自专栏王磊的博客

Spring Boot (八)MyBatis + Docker + MongoDB 4.x

MongoDB是一个强大、灵活,且易于扩展的通用型数据库。MongoDB是C++编写的文档型数据库,有着丰富的关系型数据库的功能,并在4.0之后添加了事务支持。

1192
来自专栏JadePeng的技术博客

jenkins X实践系列(1) —— 背景知识

Jenkins X 是一个高度集成化的CI/CD平台,基于Jenkins和Kubernetes实现,旨在解决微服务体系架构下的云原生应用的持续交付的问题,简化整...

4392
来自专栏乐沙弥的世界

使用swingbench实现oracle数据库压力测试

    即将上线的数据库如何来评估其性能呢,swingbench是除了Benchmark Factory for Databases的不二之选,可以用短小精悍来...

1492

扫码关注云+社区