DamiBus,专为本地多模块之间通讯解耦而设计(尤其是未知模块、隔离模块、领域模块)。零依赖。
结合 Bus 与 RPC 的概念,可作事件分发,可作接口调用,可作响应订阅。
| DamiBus | EventBus | Api | DamiBus 的情况说明 | |
|---|---|---|---|---|
| 广播 | 有 | 有 | 无 | 发送(send) + 监听(listen) 以及 Api 模式 |
| 应答 | 有 | 无 | 有 | 发送并请求(sendAndRequest) + 监听(listen) + 答复(reply) 以及 Api 模式 |
| 回调 | 有+ | 无 | 有- | 发送并订阅(sendAndSubscribe) + 监听(listen) + 答复(reply) |
| 耦合 | 弱- | 弱+ | 强++ |
如果涉及类加载器隔离:请在主程序标为编译,在其它模块标为可选。
更换新的 id 生成方案后,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 < 10000000; i++) {
Dami.bus().send("test.demo", "1");
}
System.out.println(System.currentTimeMillis() - start + "::" + count);
}
}
疑问:
为什么不用分布式消息队列呢?不好意思,真的是不同的维度事儿。