当前位置: 首页 > 软件库 > 程序开发 > 常用工具包 >

kaka-core

服务于 Java 后端的事件领域模型框架
授权协议 Apache-2.0
开发语言 Java
所属分类 程序开发、 常用工具包
软件类型 开源软件
地区 国产
投 递 者 公羊学义
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

kaka-core 是一项服务于 Java 后端的事件领域模型,全局事件通知框架。

无任何第三方依赖,源码中已包含使用范例;可解耦业务,简化程序复杂性,提高代码可读性,降低开发维护成本。

本项目为 https://gitee.com/zkpursuit/kaka-notice-lib 核心部分,在此作为独立软件仅说明此次功能增强部分。

此次更新主要强化和稳定以下两个功能点:

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中查阅,其中包括常用通用性范例。

  • 前言:四月份读了半个月kafka源码,提了几个patch,写了一个KIP,至于能不能接受就另说了。距离四月份现在已经3个月了,源码阅读时的一些领悟感觉开始渐渐淡忘了,是时候写些东西巩固巩固了,所以我想写一个系列。开始时准备先写kafka0.8.2.2,原因是代码量比较少,很裸,而且后续版本都是在这个版本的设计思想基础上搭建的。文章准备从kafka的启动开始深入,之后慢慢扩展到生产消费。 1. ka

  • 事件领域模型框架地址:https://gitee.com/zkpursuit/kaka-notice-lib 所依赖的其它第三方库: <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>

 相关资料
  • 3.4 ABP领域层 - 领域服务 3.4.1 简介 领域服务(或者服务,在DDD模式中)是被用来执行领域操作或者业务规则的。Eric Evans 在他的DDD书中这样说过:一个好的Service应该有以下三个特征: 与领域概念相关的操作不是Entity或Value Object 的一个自然部分; 接口是根据领域模型的其它元素定义的; 操作是无状态的。 领域服务和Application Servi

  • 3.6 ABP领域层 - 领域事件 在C#中,一个类可以定义其专属的事件并且其它类可以注册该事件并监听,当事件被触发时可以获得事件通知。这对于对于桌面应用程序或独立的Windows Service来说非常有用。但是, 对于Web应用程序来说会有点问题,因为对象是根据请求(request)被创建并且它们的生命周期都很短暂。我们很难注册其它类别的事件。同样地,直接注册其它类别的事件也造成了类之间的耦合

  • 我正在我的Android应用程序中使用 Realm。我通过完成事件收到来自谷歌驱动器的通知,所以我需要在服务中修改我的领域数据库。 我得到的例外是: 我在应用程序类中设置了默认配置,如下所示: 在onCreate中,我从我的服务中得到我的领域实例,如下所示: 然后我在服务中使用这个领域实例: 但是,在执行最后一个时,应用程序会启动非法状态异常。我不知道为什么。我不确定它是否与我在Android清单

  • 我正在开发几个服务,并使用Consult作为服务注册表。我可以向领事登记我的所有服务。 接下来要做的事情是,我需要能够从服务A到服务B进行通信。 如果没有服务注册表,通常我所做的只是将客户端HTTP请求从服务a分派到服务B。 但是由于现在我已经有了服务发现,我是否应该通过consul获取服务B主机地址,然后将客户端HTTP请求发送到服务B主机地址?还是执政官也提供了API网关,所以我只需要将我的客

  • 我有一个雄辩的模特, 用户:用户(id、用户名、密码、电子邮件、状态) 简介:简介(id、用户id、名字、姓氏、性别、出生日期) 在控制器逻辑中,我急切地加载Profile模型。 我能做到, 或 但是怎么做呢,

  • 问题内容: 好吧,我正在尝试用Java实现ftp服务器和ftp客户端。我正在尝试从服务器接收文件。以下是代码行。我能够实现服务器与客户端之间的连接,但是也无法将文件名发送到服务器。谁能指导我这种方法是否正确,请提出正确的建议。 服务器的实现: 客户实施: 问题答案: 上述问题的答案是: FTP客户端: FTP服务器: