Dubbo基本概念

Dubbo: 三大核心能力:

面向接口的RPC,智能容错和负载均衡,服务自动注册和发现。

交互流程图:

Dubbo基本概念

容器,服务发布者,注册中心,服务消费者,监控中心。

图中可以看到服务发布者基于容器启动,然后发布者向注册中心添加服务,然后消费者让注册中心订阅服务。(初始化完成)在收到注册中心返回的通知后, 同步 调用远程服务。发布者和消费者同时被监视器监听。

Zookeeper: 是一种 树形目录 服务,支持变更推送,适用于Dubbo的 注册中心

Dubbo基本概念

Dubbo基本概念

发布端使用@Service(protocol="")注解实现类,调用端使用@Reference注解调用接口。

服务发布者:包扫描的是实现接口目录。(因为被调用的是接口)

<!--名称唯一-->
<dubbo:application name="dubbo_provider"/>
    <!-- 注册中心地址 -->
<dubbo:registry protocol="zookeeper" address="zookeeper://127.0.0.1:2181"/>
    <!-- 配置协议端口 -->
<dubbo:protocol name="dubbo" port="20880"/>
    <!-- Service包扫描-->
<dubbo:annotation package="com.yangfan.dubbodemo.impl"/>

服务消费者:包扫描的是控制器controller(因为被调用的是控制器)

<!--Client包扫描-->
<dubbo:annotation package="com.yangfan.dubbodemo.controller"/>

<!--关闭启动时检查,可使启动顺序变得随意。生产环境要设为true-->
<dubbo:consumer check:"false"/>

dubbo支持的协议:dubbo、rmi、hessian、webservice、rest、redis等。

dubbo协议使用场景:小数据并发;消费者远多于提供者;不适合大数据传输:如文件,音视频。

dubbo支持的负载均衡:随机、轮询、最少活跃数、一次性hash,默认为随机。

配置:消费者或提供者任意一方配置即可。

注解中的loadBalance属性。[random|]

解决加上Transactional注解时,dubbo无法发布服务:

原因:spring事务控制是基于动态代理,而jdk动态代理时创建的代理对象的包名为:com.sun.proxy.$Proxy,使得dubbo发布服务时包扫描无法进行包匹配。

解决方法:用cglib代替jdk proxy。

即设置proxy-target-class为true,且指定Service添加interfaceClass指定所实现的接口。

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

远程服务调用 方式:

  • RPC(基于socket),如:webservice、dubbo
  • Http(基于tcp),springCloud

Http客户端:

Spring提供的RestTemplate封装了上述三种方式,默认使用jdk原生URLConnection。

原文 

https://segmentfault.com/a/1190000023227061

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Dubbo基本概念

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址