DamiBus,專為本地多模塊之間通訊解耦而設計(尤其是未知模塊、隔離模塊、領域模塊)。零依賴。
特點
結合 Bus 與 RPC 的概念,可作事件分發,可作接口調用,可作響應訂閱。
- 支持事務傳導(同步分發、異常透傳)
- 支持事件標識、攔截器(方便跟蹤)
- 支持監聽者排序、附件傳遞(多監聽時,可相互合作)
- 支持 Bus 和 Api 兩種體驗風格
與常見的 EventBus、ApiBean 的區別
DamiBus | EventBus | Api | DamiBus 的情況說明 | |
---|---|---|---|---|
廣播 | 有 | 有 | 無 | 發送(send) + 監聽(listen) 以及 Api 模式 |
應答 | 有 | 無 | 有 | 發送并請求(sendAndRequest) + 監聽(listen) + 答復(reply) 以及 Api 模式 |
回調 | 有+ | 無 | 有- | 發送并訂閱(sendAndSubscribe) + 監聽(listen) + 答復(reply) |
耦合 | 弱- | 弱+ | 強++ |
如果涉及類加載器隔離:請在主程序標為編譯,在其它模塊標為可選。
本次更新了什么?
- 修復 TopicDispatcherDefault::dispatch MDC 添加后沒有移除的問題
- 添加 DamiBus::unlisten 取消主題的所有監聽
- 添加 IdGenerator 接口(支持自定義id生成)
- 調整 Payload::getGuid 更名為 getPlid
- 調整 MDC(dami-guid)更名為 dami-plid
更換新的 id 生成方案后,1000萬個事件1秒左右可發完:
public class SendTest {
public static void main(String[] args) {
Dami.bus().listen("test.demo", e -> { });
long start = System.currentTimeMillis();
for (int i = 1; i < 10000000; i++) {
Dami.bus().send("test.demo", "1");
}
System.out.println(System.currentTimeMillis() - start);
}
}
疑問: 為什么不用分布式消息隊列呢?不好意思,真的是不同的維度事兒。