Dami 本地过程调用框架(主打解耦),v0.24 发布

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

特点

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

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

与常见的 EventBus、ApiBean 的区别

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

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

所谓解耦?

java 复制代码
@DamiTopic("event.user")
public interface EventUserService {
    User getUser(long userId); 
}

@DamiTopic("event.user")
public class EventUserServiceImpl { //无耦合实现了 EventUserService 接口
    public User getUser(long userId) {
        return new User(userId);
    }
}

@EnableAutoConfiguration
@SpringBootTest(classes = Demo91.class)
@ComponentScan("features.demo91_springboot")
public class Demo91 {
    @Autowired
    EventUserService eventUserService;

    @Test
    public void main(){
        User user = eventUserService.getUser(99);
        assert user.getUserId() == 99;
    }
}

本次更新了什么?

  • Payload::reply 增加返回是否成功
  • Dami.api() 的监听者参数数量可与发送者略有不同(比如增加 Payload 参数)

项目地址

相关推荐
十年Java程序媛32 分钟前
Java 多线程基础与锁机制详解|进程线程、锁升级、synchronized 与 Lock 对比
java·开发语言·spring boot
弯_弯32 分钟前
FDE 的工程能力画像:数据接入、PoC 与可复用资产的落地口径
java·服务器·开发语言
云和数据.ChenGuang2 小时前
print(f“a+b=“,result) print(f“a+b={result}“)区别
java·前端·人工智能·python·深度学习
2601_962885722 小时前
如何用 Python 算最大回撤和回撤恢复期?
java·数据库·python
毕业设计7032 小时前
(免费领源码)SSM董家湾线上点餐系统04682- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·redis·mysql·tomcat·maven·mybatis·ssm
Q26433650233 小时前
【有源码】基于SpringBoot+Vue的居民健康体检与慢病干预管理系统-面向智慧医疗的体检预约与健康知识服务平台
java·vue.js·spring boot·mysql·毕业设计·javaweb·课程设计
悠仁さん3 小时前
非类型模板参数的特化与偏特化
java·数据结构·算法
鬼手点金3 小时前
上下文:Agent 的眼睛
java·前端·人工智能·git·深度学习
171320330计算机毕设编程4 小时前
计算机毕业设计 基于Hadoop的新能源汽车发展前景分析 LW PPT
java·大数据·hadoop·python·算法·随机森林·线性回归