当前位置: 首页 > news >正文

DamiBus v1.1.0 发布(给单体多模块解耦)

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

特点

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

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

与常见的 EventBus、ApiBean 的区别

DamiBus EventBus Api DamiBus 的情况说明
广播 发送(send) + 监听(listen)
以及 Api 模式
应答 调用(call) + 监听(listen) + 答复(reply)
以及 Api 模式
耦合 弱- 弱+ 强++

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

本次更新了什么?

新版本简化了体验!

  • 调整 DamiBus:sendAndSubscribe 标为弃用
  • 调整 DamiBus:sendAndRequest 标为弃用(由 call 替代)
  • 调整 Payload:isSubscribe 标为弃用
  • 调整 Payload:isRequest 标为弃用(由 requiredReply 替代)
  • 添加 DamiBus:call 方法,意为调用(要求有一个答复)
  • 添加 Payload:requiredReply 方法,意为要求答复(或必须答复)

性能测试?

瞬发 1000万个事件,1秒左右可发完(基于 jdk11 测试):

public class SendTest {static Integer count = 0;public static void main(String[] args) {Dami.bus().listen("test.demo", e -> { count = count + 1; });long start = System.currentTimeMillis();for (int i = 0; i < 10_000_000; i++) {Dami.bus().send("test.demo", "1");}System.out.println(System.currentTimeMillis() - start + "::" + count);}
}

疑问:
为什么不用分布式消息队列呢?定位不同(侧重,单体多模块解耦)。

示例

demo21_send

//总线风格。bus()
public class Deom11 {static String topic = "demo.hello";public static void main(String[] args) {//监听事件Dami.bus().listen(topic, payload -> {System.err.println(payload); //可以有多个订阅});Dami.bus().listen(topic, payload -> {CompletableFuture.runAsync(()-> { //也可以异步消费System.err.println(payload);});});//发送事件Dami.bus().send(topic, "{name:'noear',say:'hello'}");}
}

demo12_call

//泛型总线风格。<C,R>bus()
public class Demo12 {static String topic = "demo.hello";public static void main(String[] args) {//监听事件Dami.<String,String>bus().listen(topic, payload -> {System.err.println(payload);if (payload.requiredReply()) {payload.reply("hi!"); }});//发送事件 //要求有答复(即,返回值)String rst1 = Dami.<String,String>bus().call(topic, "world"); //发送事件 //要求有答复(即,返回值) //支持默认值(没有订阅时触发)//String rst1 = Dami.<String,String>bus().call(topic, "world", ()->"demo"); System.out.println(rst1);}
}

项目地址

  • https://gitee.com/noear/dami
  • https://github.com/noear/dami
http://www.hskmm.com/?act=detail&tid=6052

相关文章:

  • 最小环 Floyd 算法 无向图的最小环问题
  • macOS Sequoia 15.7 (24G222) Boot ISO 原版可引导镜像下载
  • Nginx 安装过程
  • Xcode 26 (17A324) 正式版发布 - Apple 平台 IDE
  • macOS Tahoe 26 (25A354) Boot ISO 原版可引导镜像下载
  • mysql数据库服务主从复制实现(基于position)
  • 海量接入、毫秒响应:易易互联携手阿里云构筑高可用物联网消息中枢
  • macOS Sequoia 15.7 (24G222) 正式版 ISO、IPSW、PKG 下载
  • C++ std::list
  • 函数是编程范式的原理是什么?
  • 能耐高温400度密封圈用什么材质
  • 【IEEE出版|Fellow云集】第五届电气工程与机电一体化技术国际学术会议(ICEEMT 2025)
  • APDU笔记
  • AR眼镜:远程协作的“破局者”,让困难解决“云手帮”
  • 跨网文件摆渡系统功能全解析
  • 跨平台代码同步新时代:Gitee携手GitHub打造开发者高效协作生态
  • CTFer
  • 家政小程序源码一站式开发:助力家政企业数字化转型
  • Gitee推出跨平台镜像功能:一键同步GitHub仓库,开发者协作效率提升50%
  • DeClotH: Decomposable 3D Cloth and Human Body Reconstruction from a Single Image
  • 在 Streamable HTTP 传输模式下启动并测试 MCP Serverr (二)
  • 从0到1上手阿里云ARMS:让Java服务监控变得简单
  • 聚焦实用:内外网文件摆渡系统品牌推荐来了!
  • 生物活性肽:从基础研究到治疗应用的潜力与挑战,及计算机辅助筛选的关键作用
  • MySQL视图定义者和安全性definer/invoker的区别
  • Guid g = Guid.Empty;Guid.TryParse(, out g);
  • 【IEEE出版|上海理工大学】第六届大数据、人工智能与物联网工程国际会议(ICBAIE 2025)
  • MDI Jade9.0中文版详细下载及安装教程,附免费免激活版MDI Jade安装包!!
  • C++ std::vector
  • RC-Explainer | Reinforced Causal Explainer for Graph Neural Networks