DamiBus v0.29 发布,本地多模块解耦框架

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

特点

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

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

与常见的 EventBus、ApiBean 的区别

  Dami EventBus Api Dami 的情况说明
广播 发送(send) + 监听(listen) 以及 Api 模式
应答 发送并等响应(sendAndResponse) + 监听(listen) + 答复(reply) 以及 Api 模式
回调 有+ 有- 发送并等回调(sendAndCallback) + 监听(listen) + 答复(reply)
耦合 弱- 弱+ 强++  

如果涉及类加载器隔离:请在主程序标为编译,在其它模块标为可选。

本次更新了什么?

  • TopicRouterPatterned 增加排序支持
  • TopicRouterPatterned 分离路由能力,可定制
  • 增加基于 Tag 的路由模式定制
  • 增加 @DamiTopic:index 注解属性
  • dami-springboot-starter,增加 spronboot 2.0 的兼容
  • 修复 dami-springboot-starter 实现类被代理后不能正常注册与注销的问题

新增加的定制效果(详见仓库主页。也可按需定制自己的 Routing):

public class Demo15_path {
    public void main(){
        //切换为模式匹配路由器 + RoutingPath(支持 * 和 ** 占位符;支持 / 或 . 做为间隔)
        DamiConfig.configure(new TopicRouterPatterned(RoutingPath::new));

        //拦截
        Dami.bus().listen("demo/a/*", (payload) -> {
            System.err.println(payload);
        });

        //发送事件
        Dami.bus().send("demo/a/1", "world1");
        Dami.bus().send("demo/a/2", "world2");
    }
}
public class Demo15_tag {
    public void main(){
        //切换为模式匹配路由器 + RoutingTag(":"前为主题,后按 "," 号分割作为tag)
        DamiConfig.configure(new TopicRouterPatterned(RoutingTag::new));

        //拦截
        Dami.bus().listen("demo.a:id", (payload) -> {
            System.err.println(payload);
        });

        //发送事件
        Dami.bus().send("demo.a:id", "world1");
        Dami.bus().send("demo.a:id,name", "world2");
    }
}

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

项目地址

猜你喜欢

转载自www.oschina.net/news/259748/damibus-0-29-released