Dami,专为本地多模块之间通讯解耦而设计(尤其是未知模块、隔离模块、领域模块)。零依赖,特适合 DDD。
特点
结合 Bus 与 RPC 的概念,可作事件分发,可作接口调用,可作异步响应。
- 支持事务传导(同步分发、异常透传)
- 支持事件标识、拦截器(方便跟踪)
- 支持监听者排序、附件传递(多监听时,可相互合作)
- 支持 Bus 和 Api 两种体验风格
与常见的 EventBus、ApiBean 的区别
Dami | EventBus | ApiBean | Dami 的情况说明 | |
---|---|---|---|---|
广播 | 有 | 有 | 无 | 发送(send) + 监听(listen) 以及 Api 模式 |
应答 | 有 | 无 | 有 | 发送并等响应(sendAndResponse) + 监听(listen) + 答复(reply) 以及 Api 模式 |
回调 | 有+ | 无 | 有- | 发送并等回调(sendAndCallback) + 监听(listen) + 答复(reply) |
耦合 | 弱- | 弱+ | 强++ |
如果涉及类加载器隔离:请在主程序标为编译,在其它模块标为可选。
所谓解耦?
@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 参数)
项目地址
- https://gitee.com/noear/dami
- https://github.com/noear/dami
还没有评论,来说两句吧...