dubbo通俗的理解是干什么用的

dubbo通俗的理解是干什么用的,第1张

Dubbo是一种服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和  Spring框架无缝集成。

主要的核心部件:

Remoting: 网络通信框架,实现了 sync-over-async 和

request-response 消息机制

RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能

Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

dubbo原理和机制:应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。

注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。

监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示。

服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销。

服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销。

扩展资料:

Dubbo是使用AtomicLong从0开始累计数字的,将打包的方法调用信息(如调用的接口名称,方法名称,参数值列表等),和处理结果的回调对象callback,全部封装在一起,组成一个对象object向专门存放调用信息的全局ConcurrentHashMap里面put(ID, object)将ID和打包的方法调用信息封装成一对象connRequest,使用IoSessionwrite(connRequest)异步发送出去。

当前线程再使用callback的get()方法试图获取远程返回的结果,在get()内部,则使用synchronized获取回调对象callback的锁, 再先检测是否已经获取到结果,如果没有,然后调用callback的wait()方法,释放callback上的锁,让当前线程处于等待状态。

参考资料来源:百度百科-Dubbo

使用 @comalibabadubboconfigannotationService 发布dubbo服务的时候,当服务类没有加入@Transactional的时候没有问题
但是当加入事务后@Transactional, dubbo的 AnnotationBean 扫描 类执行下面的代码的时候就获取不到对应的注解,也就发布不了服务。
究其原因,是因为Dubbo提供的注解没有@Inherited元注解。
我们通过@Transactional标注过的Service产生一个代理类,这个代理类有两种生成方式。一种是jdk动态代理,一种是CGLib动态代理。
jdk动态代理生成的代理类与当前类共同实现相同的接口,所以与当前类也只是间接调用的关心,不在此次讨论范围。
CGLib生成的代理类为当前Service的子类,可以集成到当前Service的注解。
根据需求,我们需要更改Dubbo的源码
在Dubbo的Service注解上加上@Inherited,使这个注解变成可继承的。
然后再当前项目的spring的主配置文件中强制所有bean使用CGLib代理
这样服务即可正常发布。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12905147.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存