kaka-core服務(wù)于 Java 后端的事件領(lǐng)域模型框架
kaka-core 是一項服務(wù)于 Java 后端的事件領(lǐng)域模型,全局事件通知框架。
無任何第三方依賴,源碼中已包含使用范例;可解耦業(yè)務(wù),簡化程序復(fù)雜性,提高代碼可讀性,降低開發(fā)維護成本。
本項目為 https://gitee.com/zkpursuit/kaka-notice-lib 核心部分,在此作為獨立軟件僅說明此次功能增強部分。
此次更新主要強化和穩(wěn)定以下兩個功能點:
1、單個事件對應(yīng)多個 Command,3.0版本之前僅支持一個 Command 對應(yīng)多個事件。在此基礎(chǔ)上同名事件對應(yīng)的 Command 新增執(zhí)行優(yōu)先級,可依此模擬切面編程,以下代碼為模擬切面方法攔截器,獲取主體業(yè)務(wù)執(zhí)行耗時。
//基于事件模擬切面編程,僅支持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業(yè)務(wù)執(zhí)行");
}
}
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;
/**
* 模擬切面,執(zhí)行前
*/
@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;
/**
* 模擬切面,執(zhí)行后
*/
@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業(yè)務(wù)執(zhí)行耗時:" + offset);
}
}
2、異步回調(diào)獲取事件處理結(jié)果,此功能為同步獲取事件處理結(jié)果的增強和優(yōu)化。
sendMessage(new Message("50000", "", (IResult<Object> result) -> {
Class clasz = ((CallbackResult<Object>) result).eventHanderClass;
StringBuilder sb = new StringBuilder("異步回調(diào):\\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中查閱,其中包括常用通用性范例。
評論
圖片
表情
