Dami 基于事件总线的本地过程调用框架(首次发版)
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); } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【店滴云】物联网开源框架迎来 1.3.8 更新
框架介绍: 店滴云,让经营场所,更智能。围绕茶室、酒店、健身房、公寓、出租房等经营性场所进行物联网改造。同时支持多种物联网通信协议,开放智能门锁,智能开关,智能手环的sdk供开发者使用。可免费商用,授权版赠送官网,单商户电商与多商户电商系统。 更新内容: 全局行为代码兼容修复全局微信小程序接口处理修复全局微信公众号接入能力提升
- 下一篇
俄罗斯科技巨头 Yandex 创建大模型 YandexGPT,称性能优于 ChatGPT
根据俄罗斯媒体 Russia Today 的报道,当地科技巨头Yandex 在采访中表示,其创建的大模型 YandexGPT 相比 ChatGPT 具有更好的性能和更广阔的前景。 Yandex 的搜索和广告技术业务部总监 Dmitry Masyuk 表示,YandexGPT 在生成俄语内容时的表现已经能够“稳步超越”ChatGPT 3.5 版本,甚至在许多情况下提供了优于 ChatGPT 4.0 的回答。他还说道,YandexGPT 与其美国对手抗衡将“只是时间问题”。 而跟 Meta 公司开发的 Llama-2-7b 相比,YandexGPT 也能够生成“更好的回答”,包括生成英语内容的情况。 Dmitry Masyuk 还表示,公司正在不断评估其生成式 AI 与 ChatGPT 的技术进展情况。但其实很难对这两个系统进行比较,因为它们各有所长。比如说,一个能够解决物理学问题、撰写童话故事、给 CEO 写信的神经网络在某些方面做得更好,而在其他方面稍显逊色。那么总体来看,这个系统该说它“更好”,还是“更差”呢?
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- Linux系统CentOS6、CentOS7手动修改IP地址
- 2048小游戏-低调大师作品
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案