您现在的位置是:首页 > 文章详情

Dami 基于事件总线的本地过程调用框架(首次发版)

日期:2023-09-11点击:86

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

特点

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

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

与常见的 EventBus、ApiBean 的区别

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

依赖配置

 <dependency> <groupId>org.noear</groupId> <artifactId>dami</artifactId> <version>0.21</version> </dependency> 

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

示例

demo21_send

 public class Deom11 { static String topic = "demo.hello"; public static void main(String[] args) { //监听事件 Dami.<String,String>bus().listen(topic, payload -> { System.err.println(payload); }); //发送事件 Dami.<String,String>bus().send(topic, "world"); } } 

demo12_request

 public class Demo12 { static String topic = "demo.hello"; public static void main(String[] args) { //监听事件 Dami.busStr().listen(topic, payload -> { System.err.println(payload); if (payload.isRequest()) { Dami.busStr().reply(payload, "hi nihao!"); // sendAndResponse 只接收第一个 Dami.busStr().reply(payload, "* hi nihao!"); Dami.busStr().reply(payload, "** hi nihao!"); } }); //发送事件 String rst1 = Dami.busStr().sendAndResponse(topic, "world"); System.out.println(rst1); Dami.busStr().sendAndCallback(topic, "world", rst2 -> { System.out.println(rst2); //callback 可不限返回 }); } } 

demo31_api

 public interface UserEventSender { void onCreated(Long userId, String name); Long getUserId(String name); } public class UserEventListenerImpl { public void onCreated(Long userId, String name) { System.err.println("onCreated: userId=" + userId + ", name=" + name); } public Long getUserId(String name) { return Long.valueOf(name.hashCode()); } } public class Demo31 { public static void main(String[] args) { //注册监听器 UserEventListenerOfModule1 userEventListener = new UserEventListenerOfModule1(); Dami.api().registerListener("demo.user", userEventListener); //生成发送器 UserEventSender userEventSender = Dami.api().createSender("demo.user", UserEventSender.class); //发送测试 userEventSender.onCreated(1L, "noear"); Long userId = userEventSender.getUserId( "dami"); System.err.println("收到:响应:userId:" + userId); //注销监听器 Dami.api().unregisterListener("demo.user", userEventListener); } }
原文链接:https://www.oschina.net/news/257700/dami-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章