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) |
| 耦合 | 弱- | 弱+ | 强++ |
如果涉及类加载器隔离:请在主程序标为编译,在其它模块标为可选。
所谓解耦?
@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 参数)
项目地址
Dami 本地过程调用框架(主打解耦),v0.24 发布的更多相关文章
- 使用 RMI + ZooKeeper 实现远程调用框架
目录[-] 1 发布 RMI 服务1.1 定义一个 RMI 接口1.2 编写 RMI 接口的实现类1.3 通过 JNDI 发布 RMI 服务2 调用 RMI 服务3 RMI 服务的局限性4 使用 Zo ...
- RPC调用框架比较分析--转载
原文地址:http://itindex.net/detail/52530-rpc-%E6%A1%86%E6%9E%B6-%E5%88%86%E6%9E%90 什么是RPC: RPC(Remote Pr ...
- Hessian轻量级二进制远程调用框架
Hessian轻量级二进制远程调用框架 Hessian是一个轻量级的二进制远程调用框架,官方文档地址,它主要包括Hessian远程调用协议.Hessian序列化协议以及客户端服务端代理等几部分,关于H ...
- java使用netty模拟实现一个类dubbo的分布式服务调用框架
本文较长,如果想直接看代码可以查看项目源码地址: https://github.com/hetutu5238/rpc-demo.git 要想实现分布式服务调用框架,我们需要了解分布式服务一般需要的功能 ...
- 读懂操作系统(x86)之堆栈帧(过程调用)
前言 为进行基础回炉,接下来一段时间我将持续更新汇编和操作系统相关知识,希望通过屏蔽底层细节能让大家明白每节所阐述内容.当我们写下如下C代码时背后究竟发生了什么呢? #include <stdi ...
- Thrift架构~从图中理解thrift,它事实上是一种远程过程调用
thrift为我们简化了tcp通讯,它可以使用我们方便的建立各种语言的服务端与客户端,并实现客户端对服务器的远程过程调用,简单的说就是服务器通过thrift架构对外开放一些接口,并自己实现这些接口,如 ...
- RPC-远程过程调用协议
远程过程调用协议 同义词 RPC一般指远程过程调用协议 RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要 ...
- 无效的过程调用或参数: 'Instr'解决方法
以前我一直使用ASP无组件上传类来上传文件.但是今天又个客户反映说.不能上传.出现错误.,但在我电脑上测试没问题.后来发现客户用的是IE8 于是开始找解决方法 错误如下:Microsoft VBScr ...
- Wayland中的跨进程过程调用浅析
原文地址:http://blog.csdn.net/jinzhuojun/article/details/40264449 Wayland协议主要提供了Client端应用与Server端Composi ...
- 【原创】自己动手实现RPC服务调用框架
自己动手实现rpc服务调用框架 本文利用java自带的socket编程实现了一个简单的rpc调用框架,由两个工程组成分别名为battercake-provider(服务提供者).battercake- ...
随机推荐
- rest --framework 源码学习第一天 view 类
首先view类:源码分析
- RWKV – transformer 与 RNN 的强强联合
在 NLP (Natural Language Processing, 自然语言处理) 领域,ChatGPT 和其他的聊天机器人应用引起了极大的关注.每个社区为构建自己的应用,也都在持续地寻求强大.可 ...
- webGPU orillusion(一)
关于架构的理解与认识 Orillusion 核心借鉴了 ECS 结构,遵循 组合优于继承 的开发设计原则,实现了自己的组件系统.我们将传统复杂的逻辑划分为独立的.可重复利用的部分,每个部分可以单独 ...
- 10个 Istio 流量管理 最常用的例子,你知道几个?
10 个 Istio 流量管理 最常用的例子,强烈建议收藏起来,以备不时之需. 为了方便理解,以Istio官方提供的Bookinfo应用示例为例,引出 Istio 流量管理的常用例子. Bookinf ...
- 【Linux】shell编程(一) 变量
[Linux]shell编程(一) 变量 目录 [Linux]shell编程(一) 变量 什么是shell编程 如何运行shell脚本 第一行 #!/bin/bash 第一行叫什么? WHAT IS ...
- CF1817E Half-sum 另解与 Trygub Number
一题水两篇怎么说. 上一篇中我们采用智慧方法减少了比较次数,避免了使用复杂的高精度数.现在我们有高论!可以做到 \(\mathrm O(\log_B V\log_2 n)\) 在某一位加或者减一个大小 ...
- 国产MCU兆易GD32实现矩阵按键扫描
一.矩阵键盘 为了减少I/O口的占用,通常将按键排列成矩阵形式.在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接.使用8个io口来进行16个按键的控制读取,可以减 ...
- 聊聊Flink CDC必知必会
CDC是(Change Data Capture变更数据获取)的简称. 核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的插入INSERT.更新UPDATE.删除DELETE等),将这些变更按 ...
- decode php解密代码,方便好用,请收藏
<?php //已经加密的文件内容 $a = "eval(gzinflate(base64_decode('tVRNb+IwEL3vr/AhwomU5WOPVHSF2lSg7QJK0j ...
- 1.3 Metasploit 生成SSL加密载荷
在本节中,我们将介绍如何通过使用Metasploit生成加密载荷,以隐藏网络特征.前一章节我们已经通过Metasploit生成了一段明文的ShellCode,但明文的网络传输存在安全隐患,因此本节将介 ...