Releases: noear/damibus
Releases · noear/damibus
DamiBus 0.58,本地多模块过程调用框架(主打解耦)
DamiBus 0.57,本地多模块过程调用框架(主打解耦)
- 调整 slf4j 依赖改为 provided
- solon 升为 1.7.0
DamiBus 0.56,本地多模块过程调用框架(主打解耦)
solon 升为 1.6.2
DamiBus 0.55,本地过程调用框架(主打解耦)
- 添加 DamiBus::sendAndRequest 带超时的接口
DamiBus 0.54,本地过程调用框架(主打解耦)
本次更新:
- 修复 TopicDispatcherDefault::dispatch MDC 添加后没有移除的问题
- 添加 DamiBus::unlisten 取肖主题的所有监听
- 添加 IdGenerator 接口(支持自定义id生成)
- 调整 Payload::getGuid 更名为 getPlid
- 调整 MDC(dami-guid)更名为 dami-plid
DamiBus 0.51,本地过程调用框架(主打解耦)
本次更新:
- 删除 Dami::intercept 接口,直接使用 Dami.bus()::intercept
- 更名 sendAndResponse 为 sendAndRequest!!!
- 更名 sendAndCallback 为 sendAndSubscribe!!!
- 添加 TopicDispatcher,将调度处理与路由器开发(更方便添加监控)
- 添加 InterceptorChain::getTargets 接口(可以知道有哪些订阅)
- 添加 Acceptor::isSingle 接口,用于识别单发还是多发接收
- 添加 Payload::isSubscribe 接口,用于识别订阅
- 调整 启用新的配置方式(配置路由时,不需要重新实例化总线)
- 调整 接口默认方法处理策略(有订阅执行订阅,无订阅者执行默认)
- 调整 createSender 调整类加载器的主体
- 调整 send,sendAndSubscribe 返回类型改为 bool(马上可以知道是否有订阅目标)
新增加的监视效果,基于拦截器:
public class Demo16_intercept {
@Test
public void main() throws Exception {
Dami.bus().intercept((payload, chain) -> {
System.out.println("开始监视...");
if (chain.getTargets().size() == 0) {
System.out.println("没有订阅...");
} else {
chain.getTargets().forEach(e -> System.out.println(e.getListener()));
chain.doIntercept(payload);
}
System.out.println("结速监视...");
});
//发送事件
Dami.bus().send("demo.hello", "world");
}
}
另一个方案是用重载调度器的方法:
public class Demo16_dispatcher {
@Test
public void main() throws Exception {
DamiConfig.configure(new TopicDispatcherMonitor());
Dami.bus().send("demo.hello", "world");
}
}
public class TopicDispatcherMonitor<C,R> extends TopicDispatcherDefault<C,R> {
@Override
protected void doDispatch(Payload<C, R> payload, List<TopicListenerHolder<C, R>> targets) throws Throwable {
//开始监视...
System.out.println("开始监视...");
//用 i,可以避免遍历时添加监听的异常
for (int i = 0; i < targets.size(); i++) {
TopicListener<Payload<C,R>> listener = targets.get(i).getListener();
//发送前监视...
System.out.println("发送前监视...");
listener.onEvent(payload);
//发送后监视...
System.out.println("发送后监视...");
}
//结速监视...
System.out.println("结速监视...");
}
}
DamiBus 0.29,本地过程调用框架(主打解耦)
本次更新:
- 添加 DamiTopic::index() 属性
- 修复 dami-springboot-starter 实现类被代理后不能正常注册与注销的问题
新增加的 index 效果:
@DamiTopic("demo81.event.user")
public class EventUserServiceListener {
static final Logger log = LoggerFactory.getLogger(EventUserServiceListener.class);
public User getUser(long userId) {
log.debug("userId={}", userId);
return new User(userId);
}
}
//后面的 listener 可以起到默认实现的效果(如果前面没有,后面补上)
@DamiTopic(value="demo81.event.user", index=99)
public class EventUserServiceListenerDef {
public User getUser(long userId) {
return new User(userId);
}
}
DamiBus 0.28,本地过程调用框架(主打解耦)
本次更新:
- TopicRouterPatterned 增加排序支持
- TopicRouterPatterned 分离路由能力,可定制
- 增加基于 Tag 的路由模式定制
- dami-springboot-starter,增加 spronboot 2.0 的兼容
新增加的定制效果(详见仓库主页。也可按需定制自己的 Routing):
public class Demo15_path {
public void main(){
//切换为模式匹配路由器 + RoutingPath(支持 * 和 ** 占位符;支持 / 或 . 做为间隔)
DamiConfig.configure(new TopicRouterPatterned(RoutingPath::new));
//拦截
Dami.bus().listen("demo/a/*", (payload) -> {
System.err.println(payload);
});
//发送事件
Dami.bus().send("demo/a/1", "world1");
Dami.bus().send("demo/a/2", "world2");
}
}
public class Demo15_tag {
public void main(){
//切换为模式匹配路由器 + RoutingTag(":"前为主题,后按 "," 号分割作为tag)
DamiConfig.configure(new TopicRouterPatterned(RoutingTag::new));
//拦截
Dami.bus().listen("demo.a:id", (payload) -> {
System.err.println(payload);
});
//发送事件
Dami.bus().send("demo.a:id", "world1");
Dami.bus().send("demo.a:id,name", "world2");
}
}
疑问:
为什么不用分布式消息队列呢?不好意思,真的是不同的维度。
DamiBus 0.27
- 增加模式匹配路由器
- 提供可切换实现的机制(方便用户定制)
demo:
public class Demo15_custom {
public void main(){
//切换为模式匹配路由器(支持 * 和 ** 占位符;支持 / 或 . 做为间隔)
DamiConfig.configure(new DamiBusImpl(new TopicRouterPatterned()));
//拦截
Dami.bus().listen("demo/*/**", (payload) -> {
System.err.println(payload);
});
//发送事件
Dami.bus().send("demo/a/1", "world1");
Dami.bus().send("demo/a/2", "world2");
Dami.bus().send("Demo/b/1/2", "world3"); //大小写敏感
}
}
DamiBus 0.26
- Payload::reply 增加返回是否成功
- Dami.api() 的监听者参数数量可与发送者略有不同(比如增加 Payload 参数)
- 增加日志打印
- 增加 MDC(dami-guid)