1 背景
在查看dubbo官方文档过程中,发现dubbo支持参数回调,可以允许服务端调用客户端,只需要在 Spring 的配置文件中声明哪个参数是 callback 类型即可。Dubbo 将基于长连接生成反向代理;
参数回调方式与调用本地 callback 或 listener 相同,只需要在 Spring 的配置文件中声明哪个参数是 callback 类型即可。Dubbo 将基于长连接生成反向代理,这样就可以从服务器端调用客户端逻辑
2 意义
可以用回调函数通知客户端执行结果,或发送通知,在方法执行时间比较长时,有些类似异步调用,比如在审批工作流中回调客户端审批结果
那有人问:直接在服务端执行结束时主动调用客户端,不回调行不行?
回调接口时写在服务端的服务导出jar包中的,如果不依赖回调,需要服务端在依赖客户端的jar包,存在循环依赖的问题,而参数回调还有一个好处,就是可以由客户端决定服务端调用的回调函数,由服务端主导,变为客户端主导
3 实现例子
话不多说直接看代码
依赖环境
java 1.8
IntellJ IDEA
maven
optimus(souche) 2.0
springBoot 2.0.6
DUBBO 2.8.6
服务生产者
public interface CallbackService {
void addListener(String key, CallbackListener listener);
}
public interface CallbackListener extends Serializable {
void changed(String msg);
}
看实现类

这里踩了个小坑
在springBoot中使用dubbo,用注解@Servic是没办法配置下一级method,这里引入了个dubbo.xml

使用ImportResource在boot中引入xml配置

服务消费者

执行效果:
在服务消费者调用服务生产者的addListener后,在客户端打印出callback1:Date
4demo后的思考,使用场景
服务端先把回调接口配置好,回调逻辑代码写好,要出一份文档,文档包括回调逻辑,什么情况会执行回调,以及回调函数编写的注意点,文档地址一起打包进服务导出的jar中,后续多个服务消费者,根据文档,编写自己的回调函数;以免出现沟通问题导致生产故障
文章转载自你的顾南,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




