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


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

    特点

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

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

    与常见的 EventBus、ApiBean 的区别

    DamiBusEventBusApiDamiBus 的情况说明
    广播发送(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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

    项目地址

    • https://gitee.com/noear/dami
    • https://github.com/noear/dami
  • 相关阅读:
    基于 Milvus 和 ResNet50 的图像搜索(部署及应用)
    golang的mysql数据库连接
    JS中的箭头函数
    8.Ribbon负载均衡服务调用
    〖Python 数据库开发实战 - MySQL篇⑫〗- 数据表的字段约束
    WandB的使用
    Flink概述
    沉睡者IT - 什么是Web3.0?
    云安全之等级保护介绍
    【C++程序员必修第一课】C++基础课程-13:std::vector 动态数组
  • 原文地址:https://blog.csdn.net/cwzb/article/details/134032451