前言
本文介绍dubbo的核心概念,架构和相关组件的搭建
dubbo核心概念
dubbo是一款高性能的Java RPC框架
特性:
- 面向接口代理的高性能RPC调用(直接调用接口即可,屏蔽了远程调用的细节)
- 只能负载均衡(能根据服务器的压力智能分配远程调用哪台)
- 服务自动注册与发现(支持多种注册中心,实时感知服务的上下线)
- 运行时流量调度(配置不同的路由规则来决定调用哪些服务器的服务,测试版服务只在部分服务器上部署,初期只将特定的请求提交到新版的服务器,方便测试,便于灰度发布)
- 可视化的运维
- 高扩展性
灰度发布:在新版软件写好后只在部分服务器上部署,待测试稳定后逐渐曾多部署的个数,直到所有服务器都部署了新版本
架构
注册中心(registry):所有服务器上负责的业务逻辑都要注册在注册中心上,当一台服务器需要远程调用其他服务器的业务时,先去注册中心查找都有哪些服务器负责这个业务。类似一个清单,上面记录每台服务器负责的业务是什么。注册中心负责将请求分配给合适的服务器。
提供者(provider):提供服务方,RPC中的B服务器
消费者(customer):调用服务方,RPC中的A服务器
容器(container):dubbo框架的容器
监控中心(monitor):提供者和消费者的监控信息
流程:容器启动dubbo框架—> 提供者将所有服务注册到注册中心—>消费者在注册中心订阅(查找)需要的服务,如果服务提供者有变动,注册中心也会通知消费者(基于长连接)—>消费者调用服务(根据负载均衡分配到具体的一台服务器)—>监控中心接收并记录监控信息
注册中心搭建
dubbo支持多种注册中心,推荐使用zookeeper
win下安装zookeeper:
- zookeeper 官网下载稳定版本
- 解压,复制conf文件夹下的zoo_sample.cfg,重命名为zoo.cfg
- 将zoo.cfg里临时数据的目录更改为自己创建的文件夹(12行datadir)
- 在bin目录下用命令行启动即可(zkServer.cmd)
- 可用zkCli.cmd来测试是否启动成功
zookeeper详细内容见相关笔记
监控中心搭建
- 在dubbo github找到dubbo admin
- 下载这个dubbo admin 项目并用maven构建
- 修改“dubbo-admin\src\main\resources” 下的application.properties,确保zookeeper的端口号正确(默认为:dubbo.registry.address=zookeeper://127.0.0.1:2181)
- 在dubbo-admin下用mvn命令打jar包:mvn clean package (确保maven已安装)
- 成功后再target文件夹里就会有生成的jar包,将此jar包移动到想要的位置,然后用java启动即可(java -jar jar包名.jar)
- 启动后dubbo监控会再7001端口启动
- 网站账号和密码都是root
- 注意,在启动之前先启动zookeeper才行
创建服务提供者
提供者和消费者都是服务器上的Java工程,比如两个springboot工程,现利用dubbo实现两个工程之间的RPC通信。
由于不同工程之间需要进行通信,dubbo推荐将所有接口和bean单独存放成一个工程,在其他工程的maven中引入这个接口专用工程即可。
对于提供者:
将服务提供者注册到注册中心(暴露服务)
maven中导入dubbo依赖(去maven仓库搜索,将对应的dependency加入pom.xml)
引入操作zookeeper的客户端Curator Framework (dubbo2.6版本后开始使用)
用spring配置服务提供者,在官网找到provider.xml文件,再resource里参照其编写自己的配置文件
- 指定当前服务/应用的名字(同样服务的名字相同,不要重名)
1 | <dubbo:application name="hello-world-app" /> |
- 指定注册中心的位置
1 | <dubbo:registry address="zookeeper://224.5.6.7:1234" /> |
- 指定通信规则(协议,端口)
1 | <dubbo:protocol name="dubbo" port="20880" /> |
- 暴露服务,ref指向服务真正的实现对象
1 | <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" /> |
- 服务的实现
1 | <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl" /> |
- 加载spring配置,运行下面代码,可以发现在监控中心会多出刚刚配置的服务
1 | import org.springframework.context.support.ClassPathXmlApplicationContext; |
创建服务的消费者
同理maven引入dubbo框架和zookeeper的操作
用spring配置消费者
- 指定名字
1 | <dubbo:application name="consumer-of-helloworld-app" /> |
- 指定注册中心的地址
1 | <dubbo:registry address="zookeeper://224.5.6.7:1234" /> |
- 声明需要调用的远程服务的接口,生成远程服务代理
1 | <dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" /> |
- 加载spring配置,调用远程服务,运行代码可以发现调用成功,并且监控中心有一个消费者,一个提供者
1 | import org.springframework.context.support.ClassPathXmlApplicationContext; |
监控中心安装及配置
dubbo admin——管理控制台,图形化界面,可获得所有提供者、消费者(已完成,详见dubbo 入门笔记1)
dubbo-monitor-simple——简单的监控中心(此处讨论其安装和配置)
git下载相关组件
1
git clone https://github.com/apache/incubator-dubbo-ops
下载后dubbo-monitor-simple就是简易的监控中心
修改配置
在 dubbo-admin-master\dubbo-monitor-simple\target\classes\conf 下有dubbo.properties文件,在其中可修改端口号等配置,保证注册中心的地址正确启动简易的监控中心
在 dubbo-admin-master\dubbo-monitor-simple\target\classes\META-INF\assembly\bin 目录下为可执行的脚本,运行start.bat即可启动配置消费者和提供者连接监控中心
在之前的spring配置中加入dubbo:monitor的配置,具体信息参考schema 配置参考手册
