Dubbo是什么
分布式服务框架
高性能与透明化的RPC远程服务调用方案
SOA服务治理方案
Dubbo架构
Provider:暴露服务的服务提供商
Consumer:调用远程服务的消费方
Registry:服务注册与发现服务中心
Monitor:统计服务调用次数与调用时间的监测中心
调用流程:
0:服务容器启动,加载,运行服务提供者
1:服务提供者启动后,向注册中心注册自己的服务
2:服务消费者启动后,向注册中心订阅需要调用的服务
3:注册中心向消费者返回对应调用服务的URL列表
4:消费者根据返回的URL地址列表,通过软负载均衡的算法,选出一台提供者进行调用
5:服务提供者与消费者,在内存中累计服务的调用次数与调用时间,并把这些信息定时发送给监测中心
Dubbo注册中心
对于服务提供方,它需要发布服务,随着业务的复杂度逐渐提高,需要提供的服务类型与数量也逐渐增加。
对于服务消费者,它关心如何调用自己需要的服务,面对服务的类型与数量逐渐增加,需要对这些服务进行合理的管理方便消费者调用。
对于服务提供者与服务消费者来说,它们可能兼具这两种角色,服务提供方同时也可能是服务消费方。
将服务统一管理起来,可以有效的优化内部对服务的发布与调用。服务注册中心可以通过某种特定的协议完成服务的对外统一。
常见的dubbo服务注册中心有:
Multicast注册中心
Zookeeper注册中心
Redis注册中心
Simple注册中心
Dubbo优缺点
1:透明化的远程方法调用(可以像调用本地方法一样调用远程方法,只需要简单的配置,没有API的侵入)
2:软负载均衡及容错机制
3:服务注册中心自动注册
—不需要写死服务提供者ip,注册中心可以根据接口名自动查询服务提供者ip
4:服务接口的监控与治理
可以通过Dubbo-admin与Dubbo-monitor对服务接口进行监控与治理
5:Dubbo只能用于java程序
Dubbo入门Demo
1:服务提供方相关dubbo配置
<!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
<dubbo:application name="demotest-provider" owner="programmer" organization="dubbox"/>
<!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!-- 用dubbo协议在20881端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20881" />
<!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" protocol="dubbo" />
<!--具体实现该接口的 bean-->
<bean id="demoService" class="com.alibaba.dubbo.demo.impl.DemoServiceImpl"/>
2:服务消费方相关dubbo配置
<dubbo:application name="demotest-consumer" owner="programmer" organization="dubbox"/>
<!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
<dubbo:reference id="permissionService" interface="com.alibaba.dubbo.demo.DemoService"/>
<dubbo:reference id="findNameService" interface="com.dubbo.user.api.UserService" />
3:项目启动步骤
此处提供两个服务,分别为dubbo-provider与dubbo-user-provider。dubbo-provider是用dubbo协议在20881端口暴露服务,dubbo-user-provider是用dubbo协议在20880端口暴露服务。dubbo-consumer服务消费者同时订阅这两个服务。
//测试常规服务
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("consumer.xml");
context.start();
System.out.println("consumer start");
//dubbo-provider提供
DemoService demoService = context.getBean(DemoService.class);
//dubbo-user-provider提供
UserService userService = context.getBean(UserService.class);
System.out.println("consumer");
System.out.println(demoService.getPermissions(1L));
System.err.println(userService.findName(1L));
4:备注
需要先启动zookeeper服务注册中心,再启动服务提供者(比如这里的dubbo-provider,dubbo-user-provider),最后消费者才能对服务进行调用。
5:代码下载
https://download.csdn.net/download/qq_31071543/10579798
https://download.csdn.net/download/qq_31071543/10579821
2018-09-30:搭建一个springboot+dubbo项目,项目地址为:
https://github.com/lx-sunday/springboot-dubbo.git