DamiBus,专为本地多模块之间通讯解耦而设计(尤其是未知模块、隔离模块、领域模块)。零依赖,特适合 DDD。
特点
结合 Bus 与 RPC 的概念,可作事件分发,可作接口调用,可作异步响应。
- 支持事务传导(同步分发、异常透传)
- 支持事件标识、拦截器(方便跟踪)
- 支持监听者排序、附件传递(多监听时,可相互合作)
- 支持 Bus 和 Api 两种体验风格
与常见的 EventBus、ApiBean 的区别
| |
Dami |
EventBus |
Api |
Dami 的情况说明 |
| 广播 |
有 |
有 |
无 |
发送(send) + 监听(listen) 以及 Api 模式 |
| 应答 |
有 |
无 |
有 |
发送并等响应(sendAndResponse) + 监听(listen) + 答复(reply) 以及 Api 模式 |
| 回调 |
有+ |
无 |
有- |
发送并等回调(sendAndCallback) + 监听(listen) + 答复(reply) |
| 耦合 |
弱- |
弱+ |
强++ |
|
如果涉及类加载器隔离:请在主程序标为编译,在其它模块标为可选。
本次更新了什么?
- 增加模式匹配路由器
- 提供可切换实现的机制(方便用户定制)
public class Demo15_custom {
public void main(){
//切换为模式匹配路由器(支持 * 和 ** 占位符;支持 / 或 . 做为间隔)
DamiConfig.configure(new DamiBusImpl(new TopicRouterPatterned()));
//拦截
Dami.bus().listen("demo/*/**", (payload) -> {
System.err.println(payload);
});
//发送事件
Dami.bus().send("demo/a/1", "world1");
Dami.bus().send("demo/a/2", "world2");
Dami.bus().send("Demo/b/1/2", "world3"); //大小写敏感
}
}
项目地址