暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

dubbo参数回调的使用与思考

你的顾南 2020-03-08
775

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论