事件领域模型框架 kaka 基础核心 kaka-core 更新至 4.0 稳定版
kaka 是一项服务于 Java 后端的事件领域模型,全局事件通知框架。
kaka-core已移至 https://gitee.com/zkpursuit/kaka-core , 并支持 maven 直接安装。
此次更新主要强化和稳定以下两个功能点:
1、单个事件对应多个 Command,3.0版本之前仅支持一个 Command 对应多个事件。在此基础上同名事件对应的 Command 新增执行优先级,可依此模拟切面编程,以下代码为模拟切面方法拦截器,获取主体业务执行耗时。
//基于事件模拟切面编程,仅支持Command
sendMessage(new Message("40000"), true);
package kaka.test.unit;
import com.kaka.notice.Command;
import com.kaka.notice.Message;
import com.kaka.notice.annotation.Handler;
/**
* 模拟切面
*/
@Handler(cmd = "40000", type = String.class, priority = 2)
public class SimulateAopCommand extends Command {
@Override
public void execute(Message msg) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Aop业务执行");
}
}
package kaka.test.unit;
import com.kaka.notice.Command;
import com.kaka.notice.IResult;
import com.kaka.notice.Message;
import com.kaka.notice.SyncResult;
import com.kaka.notice.annotation.Handler;
/**
* 模拟切面,执行前
*/
@Handler(cmd = "40000", type = String.class, priority = 1)
public class SimulateAopBeforeCommand extends Command {
@Override
public void execute(Message msg) {
IResult execStartTime = new SyncResult<>(); //中间变量亦可使用 ThreadLocal 存储
execStartTime.set(System.currentTimeMillis());
msg.setResult("execStartTime", execStartTime);
}
}
package kaka.test.unit;
import com.kaka.notice.Command;
import com.kaka.notice.IResult;
import com.kaka.notice.Message;
import com.kaka.notice.annotation.Handler;
/**
* 模拟切面,执行后
*/
@Handler(cmd = "40000", type = String.class, priority = 3)
public class SimulateAopAfterCommand extends Command {
@Override
public void execute(Message msg) {
IResult execStartTime = msg.getResult("execStartTime");
long offset = System.currentTimeMillis() - execStartTime.get();
System.out.println("Aop业务执行耗时:" + offset);
}
}
2、异步回调获取事件处理结果,此功能为同步获取事件处理结果的增强和优化。
sendMessage(new Message("50000", "", (IResult<Object> result) -> {
Class clasz = ((CallbackResult<Object>) result).eventHanderClass;
StringBuilder sb = new StringBuilder("异步回调:\\\\t" + clasz.getTypeName() + "\\\\t");
Object resultObj = result.get();
if (resultObj instanceof Object[]) {
Object[] ps = (Object[]) resultObj;
sb.append(Arrays.toString(ps));
} else {
sb.append(resultObj);
}
System.out.println(sb);
}), true);
以上范例代码均可在源码test中查阅,其中包括常用通用性范例。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
KubeVela 1.1 发布,开启混合环境应用交付新里程碑
在云原生理念迅速普及的今天,混合环境部署(混合云 / 多云 / 分布式云 / 边缘)已经成为了大多数企业应用、SaaS 服务、应用持续交付平台的必然选择,而云原生技术的发展趋势也正在朝着 “一致的、跨云、跨环境的的应用交付” 不断迈进。然而,无论是 Kubernetes 本身还是现有的各类应用交付系统,都没有在现今混合、分布式的部署环境之上引入一致的上层抽象来为应用交付进行建模。这种缺乏统一上层抽象的应用交付过程,往往同底层基础设施紧密耦合,导致用户心智负担很重并且严重依赖于用户个人的经验和能力。这不仅会大幅影响用户体验、降低生产效率,甚至还会导致错误和故障的发生。 而现在,这个问题终于有了一个开源、标准,又不失灵活度的解法。它就是: KubeVela 作为一个开箱即用、面向现代微服务架构的应用交付与管理平台,今天正式发布了 1.1 版本,以更加用户友好和完善的功能集,开启了 “让混合环境应用交付更加简单高效” 的重要里程碑。 具体来说,1.1 版本的 KubeVela 与现有各类应用交付系统相比,有着显著的不同和优势: 完全以应用为中心 - 与各类 “搭积木” 式的 PaaS 系统或...
-
下一篇
Redis 高可用篇:你管这叫 Sentinel 哨兵集群原理
概要 我们知道「主从复制是高可用的基石」,从库宕机依然可以将请求发送给主库或者其他从库,但是 Master 宕机,只能响应读操作,写请求无法再执行。 所以主从复制架构面临一个严峻问题,主库挂了,无法执行「写操作」,无法自动选择一个 Slave 切换为 Master,也就是无法故障自动切换。 深夜与女朋友么么哒……(此处省略 10000 字),突然宕机,总不能提起裤子从床上爬起来手工进行主从切换,再通知其他程序员把地址重新改成新主库上线。 如此一折腾自己已被女友切换成前男友了,万万使不得。所以我们必须有一个高可用的方案,为此,Redis 官方提供一个高可用方案——哨兵(Sentinel)。 开篇寄语 技术的迭代非常的快,但是从技术中沉淀下来的思维却是受益终生的。所以不要担心什么中年危机,那些担心中年危机的人通常很难成长起来。只要我们成长,只要我们的认知在不断突破,就不用担心中年危机,这个世界始终是需要那些优秀人才的。 什么是哨兵(Sentinel) 65 哥:码哥,虽然我没女朋友,但是,未雨绸缪我要掌握这个哨兵模式,防止当深夜与女朋友么么哒被打扰,你快说说哨兵的实现原理吧。 搭建实例采用...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL数据库在高并发下的优化方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker容器配置,解决镜像无法拉取问题