开源项目 DamiBus v0.54 发布,1000 万发事件/秒

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秒左右可发完(基于 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);
    }
}

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

项目地址

  • https://gitee.com/noear/dami
  • https://github.com/noear/dami

你可能感兴趣的:(开源,java,dami,eventbus,bus)