DamiBus,专为本地多模块之间通讯解耦而设计(尤其是未知模块、隔离模块、领域模块)。零依赖,特适合 DDD。

特点

结合 Bus 与 RPC 的概念,可作事件分发,可作接口调用,可作响应订阅。

  • 支持事务传导(同步分发、异常透传)
  • 支持事件标识、拦截器(方便跟踪)
  • 支持监听者排序、附件传递(多监听时,可相互合作)
  • 支持 Bus 和 Api 两种体验风格

与常见的 EventBus、ApiBean 的区别

DamiBus EventBus Api DamiBus 的情况说明
广播 发送(send) + 监听(listen)
以及 Api 模式
应答 发送并请求(sendAndRequest) + 监听(listen) + 答复(reply)
以及 Api 模式
回调 有+ 有- 发送并订阅(sendAndSubscribe) + 监听(listen) + 答复(reply)
耦合 弱- 弱+ 强++

如果涉及类加载器隔离:请在主程序标为编译,在其它模块标为可选。

本次更新了什么?

  • 删除 Dami::intercept 接口,直接使用 Dami.bus()::intercept
  • 更名 sendAndResponse 为 sendAndRequest!!!
  • 更名 sendAndCallback 为 sendAndSubscribe!!!
  • 添加 TopicDispatcher,将调度处理与路由器开发(更方便添加监控)
  • 添加 InterceptorChain::getTargets 接口(可以知道有哪些订阅)
  • 添加 Acceptor::isSingle 接口,用于识别单发还是多发接收
  • 添加 Payload::isSubscribe 接口,用于识别订阅
  • 调整 启用新的配置方式(配置路由时,不需要重新实例化总线)
  • 调整 接口默认方法处理策略(有订阅执行订阅,无订阅者执行默认)
  • 调整 createSender 调整类加载器的主体
  • 调整 send,sendAndSubscribe 返回类型改为 bool(马上可以知道是否有订阅目标)

新增加的监视效果,基于拦截器:

public class Demo16_intercept {
@Test
public void main() throws Exception {
Dami.bus().intercept((payload, chain) -> {
System.out.println("开始监视...");
if (chain.getTargets().size() == 0) {
System.out.println("没有订阅...");
} else {
chain.getTargets().forEach(e -> System.out.println(e.getListener()));
chain.doIntercept(payload);
}
System.out.println("结速监视...");
}); //发送事件
Dami.bus().send("demo.hello", "world");
}
}

另一个方案是用重载派发器的方法:

public class Demo16_dispatcher {
@Test
public void main() throws Exception {
DamiConfig.configure(new TopicDispatcherMonitor()); Dami.bus().send("demo.hello", "world");
}
} public class TopicDispatcherMonitor<C,R> extends TopicDispatcherDefault<C,R> {
@Override
protected void doDispatch(Payload<C, R> payload, List<TopicListenerHolder<C, R>> targets) throws Throwable {
//开始监视...
System.out.println("开始监视..."); //用 i,可以避免遍历时添加监听的异常
for (int i = 0; i < targets.size(); i++) {
TopicListener<Payload<C,R>> listener = targets.get(i).getListener(); //发送前监视...
System.out.println("发送前监视...");
listener.onEvent(payload);
//发送后监视...
System.out.println("发送后监视...");
} //结速监视...
System.out.println("结速监视...");
}
}

疑问:

为什么不用分布式消息队列呢?不好意思,真的是不同的维度事儿。

项目地址

DamiBus v0.51 发布的更多相关文章

  1. JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布

    JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布   研究了一年多的js,也差不多写一个自己的js库了.我写这个不算框架,只是一个小型的js工具 ...

  2. React Native v0.4 发布,用 React 编写移动应用

    React Native v0.4 发布,自从 React Native 开源以来,包括超过 12.5k stars,1000 commits,500 issues,380 pull requests ...

  3. KubeEdge v0.2发布,全球首个K8S原生的边缘计算平台开放云端代码

    KubeEdge开源背景 KubeEdge在18年11月24日的上海KubeCon上宣布开源,技术圈曾掀起一阵讨论边缘计算的风潮,从此翻开了边缘计算和云计算联动的新篇章. KubeEdge即Kube+ ...

  4. JuiceFS v0.17 发布,通过 1270 项 LTP 测试!

    小伙伴们大家好,JuiceFS v0.17 在国庆小长假来临之际如期发布了!这是我们在 2021 年秋季推出的第二个版本,让我们直奔主题,看看都有哪些新变化吧. 本次更新累计 80+ 提交,共有 9 ...

  5. Scala.js v0.1 发布,在浏览器直接运行 Scala

    今天我们发布了 Scala.js 的首个版本,这个项目是在今年六月份的时候宣布的. 第一个版本支持的特性: 支持所有 Scala 特性,包括宏,不过有一些 语义上的区别 可非常好的跟 JavaScri ...

  6. MinDoc v0.6 发布,轻量级文档在线管理系统

    更新日志 新增 标签功能,可以根据标签组织项目 新增 用户删除功能,删除后的用户项目以及其他数据会自动转移到超级管理员账户上 新增 项目描述支持Markdown语法 优化 项目标签添加效果 优化 登录 ...

  7. PHP-Beast V0.6 发布 (PHP源码加密模块)

    本版本主要修改了一些bug和增加了一些配置项: 1. 设置缓存大小可以使用单位, 例如: beast.cache_size = 10m; 2. 可以在配置文件中禁止beast模块, 例如: beast ...

  8. [Dev Blog] KCV插件 —— Provissy Tools 。

    承蒙各位支持! 正式版已推出,请前往http://tieba.baidu.com/p/3398574166 或者前往:http://provissy.com/?p=7 请不要在这里回复,我无法保证回复 ...

  9. j2ee log4j集中式日志解决方案logpool-v0.4发布说明

    logpool v0.4发布说明: 1.持久化采用mongodb非结构化存储实现,以满足后续调整的灵活需要:

  10. sqler 集成 terraform v0.12 生成资源部署文件

    terraform v0.12 发布了,有好多新功能的添加,包括语法的增强,新函数的引入,更好的开发提示 只是当前对于一些老版本的provider 暂时还不兼容,但是大部分官方的provider 都是 ...

随机推荐

  1. SQL改写案例1

    一开发哥们找我改写SQL,他写的逻辑始终不对,安排! -- 他写的SQL: -- order_id 是主键 with a as ( select str_to_date(regist_time,'%Y ...

  2. Ubuntu部署雷池Waf社区版

    安装docker环境 更新软件包 sudo apt update 安装docker环境 apt-get install docker.io docker -v 安装docker compose V2版 ...

  3. disabled_button

    根据题目提示,是前端的知识 进入页面,flag按钮灰了按不下去 右键检查发现按钮地方的样式,发现有一个disabled,这里就直接把他删掉点击回车就可以点击了

  4. 用友NC产品接口开发,通过轻易云数据集成平台快速调用

    通过用友NC产品的 UAP V63平台.插件相关处理.相关业务逻辑处理课程目标与要求课程内容课程目标与要求业务逻辑处理外部系统信息设置节点新建外部系统默认匹配规则:仅按对照表:外部系统数据与UAP.接 ...

  5. [ABC261B] Tournament Result

    Problem Statement $N$ players played a round-robin tournament. You are given an $N$-by-$N$ table $A$ ...

  6. Java项目整合短信验证码

    一.开通短信服务 本来想整合阿里云短信服务的,可是签名一直审核不过,所以在阿里云的云市场找到了一个替代产品(sddx) 接下来小伙伴们按照自己的经济实力购买或者用免费的5条(我就是用免费的5条了) 购 ...

  7. Java五种设计模式实现奶茶订单生成系统小DEMO

    前言 这是大学时候上设计模式这门课写的程序,当时课程任务是要求结合五个设计模式写一个系统,最近偶然翻到,把系统分享一下. 成品预览 主界面 ​ 功能介绍 订单管理系统,实现了对订单的增删改查.且实现了 ...

  8. 欧奈尔的RPS指标如何使用到股票预测

    前言 1988年,欧奈尔将他的投资理念写成了<笑傲股市How to Make Money in Stocks>.书中总结了选股模式CANSLIM模型,每一个字母都代表一种尚未发动大涨势的潜 ...

  9. 组合式api-侦听器watch的语法

    和vue2对比,也是语法上稍有不同. 监听单个数据对象 <script setup> import {ref, watch} from "vue"; const cou ...

  10. ​3D 高斯点染简介

    3D 高斯点染技术由 3D Gaussian Splatting for Real-Time Radiance Field Rendering 一文首次提出.作为一种栅格化技术,3D 高斯点染可用于实 ...