Dubbo 入门笔记2

前言

本文介绍dubbo的核心概念,架构和相关组件的搭建

dubbo核心概念

dubbo是一款高性能的Java RPC框架

特性:

  1. 面向接口代理的高性能RPC调用(直接调用接口即可,屏蔽了远程调用的细节)
  2. 只能负载均衡(能根据服务器的压力智能分配远程调用哪台)
  3. 服务自动注册与发现(支持多种注册中心,实时感知服务的上下线)
  4. 运行时流量调度(配置不同的路由规则来决定调用哪些服务器的服务,测试版服务只在部分服务器上部署,初期只将特定的请求提交到新版的服务器,方便测试,便于灰度发布)
  5. 可视化的运维
  6. 高扩展性

灰度发布:在新版软件写好后只在部分服务器上部署,待测试稳定后逐渐曾多部署的个数,直到所有服务器都部署了新版本

架构

注册中心(registry):所有服务器上负责的业务逻辑都要注册在注册中心上,当一台服务器需要远程调用其他服务器的业务时,先去注册中心查找都有哪些服务器负责这个业务。类似一个清单,上面记录每台服务器负责的业务是什么。注册中心负责将请求分配给合适的服务器。

提供者(provider):提供服务方,RPC中的B服务器

消费者(customer):调用服务方,RPC中的A服务器

容器(container):dubbo框架的容器

监控中心(monitor):提供者和消费者的监控信息

流程:容器启动dubbo框架—> 提供者将所有服务注册到注册中心—>消费者在注册中心订阅(查找)需要的服务,如果服务提供者有变动,注册中心也会通知消费者(基于长连接)—>消费者调用服务(根据负载均衡分配到具体的一台服务器)—>监控中心接收并记录监控信息

注册中心搭建

dubbo支持多种注册中心,推荐使用zookeeper

win下安装zookeeper:

  1. zookeeper 官网下载稳定版本
  2. 解压,复制conf文件夹下的zoo_sample.cfg,重命名为zoo.cfg
  3. 将zoo.cfg里临时数据的目录更改为自己创建的文件夹(12行datadir)
  4. 在bin目录下用命令行启动即可(zkServer.cmd)
  5. 可用zkCli.cmd来测试是否启动成功

zookeeper详细内容见相关笔记

监控中心搭建

  1. dubbo github找到dubbo admin
  2. 下载这个dubbo admin 项目并用maven构建
  3. 修改“dubbo-admin\src\main\resources” 下的application.properties,确保zookeeper的端口号正确(默认为:dubbo.registry.address=zookeeper://127.0.0.1:2181)
  4. 在dubbo-admin下用mvn命令打jar包:mvn clean package (确保maven已安装)
  5. 成功后再target文件夹里就会有生成的jar包,将此jar包移动到想要的位置,然后用java启动即可(java -jar jar包名.jar)
  6. 启动后dubbo监控会再7001端口启动
  7. 网站账号和密码都是root
  8. 注意,在启动之前先启动zookeeper才行

创建服务提供者

提供者和消费者都是服务器上的Java工程,比如两个springboot工程,现利用dubbo实现两个工程之间的RPC通信。

由于不同工程之间需要进行通信,dubbo推荐将所有接口和bean单独存放成一个工程,在其他工程的maven中引入这个接口专用工程即可。

对于提供者:

将服务提供者注册到注册中心(暴露服务)

  1. maven中导入dubbo依赖(去maven仓库搜索,将对应的dependency加入pom.xml)

  2. 引入操作zookeeper的客户端Curator Framework (dubbo2.6版本后开始使用)

  3. 用spring配置服务提供者,在官网找到provider.xml文件,再resource里参照其编写自己的配置文件

    1. 指定当前服务/应用的名字(同样服务的名字相同,不要重名)
1
<dubbo:application name="hello-world-app"  />
  1. 指定注册中心的位置
1
<dubbo:registry address="zookeeper://224.5.6.7:1234" />
  1. 指定通信规则(协议,端口)
1
<dubbo:protocol name="dubbo" port="20880" />
  1. 暴露服务,ref指向服务真正的实现对象
1
<dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" />
  1. 服务的实现
1
<bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl" />
  1. 加载spring配置,运行下面代码,可以发现在监控中心会多出刚刚配置的服务
1
2
3
4
5
6
7
8
9
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"http://10.20.160.198/wiki/display/dubbo/provider.xml"});
context.start();
System.in.read(); // 按任意键退出
}
}

创建服务的消费者

  1. 同理maven引入dubbo框架和zookeeper的操作

  2. 用spring配置消费者

    1. 指定名字
1
<dubbo:application name="consumer-of-helloworld-app"  />
  1. 指定注册中心的地址
1
<dubbo:registry address="zookeeper://224.5.6.7:1234" />
  1. 声明需要调用的远程服务的接口,生成远程服务代理
1
<dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" />
  1. 加载spring配置,调用远程服务,运行代码可以发现调用成功,并且监控中心有一个消费者,一个提供者
1
2
3
4
5
6
7
8
9
10
11
12
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.apache.dubbo.demo.DemoService;

public class Consumer {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"http://10.20.160.198/wiki/display/dubbo/consumer.xml"});
context.start();
DemoService demoService = (DemoService)context.getBean("demoService"); // 获取远程服务代理
String hello = demoService.sayHello("world"); // 执行远程方法
System.out.println( hello ); // 显示调用结果
}
}

监控中心安装及配置

dubbo admin——管理控制台,图形化界面,可获得所有提供者、消费者(已完成,详见dubbo 入门笔记1

dubbo-monitor-simple——简单的监控中心(此处讨论其安装和配置)

  1. git下载相关组件

    1
    git clone https://github.com/apache/incubator-dubbo-ops

    下载后dubbo-monitor-simple就是简易的监控中心

  2. 修改配置
    在 dubbo-admin-master\dubbo-monitor-simple\target\classes\conf 下有dubbo.properties文件,在其中可修改端口号等配置,保证注册中心的地址正确

  3. 启动简易的监控中心
    在 dubbo-admin-master\dubbo-monitor-simple\target\classes\META-INF\assembly\bin 目录下为可执行的脚本,运行start.bat即可启动

  4. 配置消费者和提供者连接监控中心
    在之前的spring配置中加入dubbo:monitor的配置,具体信息参考schema 配置参考手册

Author: Shuchen
Link: http://yoursite.com/2020/05/30/dubbo-%E5%85%A5%E9%97%A8%E7%AC%94%E8%AE%B02/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.