Dubbo知识点梳理

Dubbo是阿里的一个产品。是一个分布式、高性能、透明化RPC服务框架,提供服务自动注册、自动发现等高效服务治理方案。
Dubbo是实现SOA架构时常用的服务之一,除了Dubbo外还有如下可供选择
制作兼容JDK1.8的dubbo-admin

实现SOA架构时常用的服务

  1. Dubbo作为服务
  2. WebService作为服务(比较老了)
  3. Dubbox作为服务(当当网开发的)
  4. 服务方就是web项目,调用web项目的控制器(HttpClient)

RPC(远程过程调用协议)

客户端通过互联网调用远程服务器,不知道远程服务器的具体代码实现,只知道远程服务器提供了什么功能。
优点:安全

Dubbo架构

首先来看一下架构图
在这里插入图片描述

架构图解析

  • 虚线都是异步访问,实线都是同步访问
  • 紫色虚线表示是在启动时完成的
  • 绿色虚线(实线)都是程序运行过程中执行的功能
  • 所有的角色都可以在部署在单独的服务器上,但是必须遵守特定的协议

节点说明

  • Provider
    服务提供者,发布方
  • Consumer
    服务消费者,调用方
  • Container
    Dubbo容器,依赖于Spring容器
  • Registry
    注册中心(当Container启动时会把当前服务中所有可以提供的服务列表拿到Registry中进行注册),主要作用就是告诉Consumer提供了什么服务和服务方在哪里,以及服务放放生变化后及时通知Consumer
  • Monitor
    监听器,负责统计服务调用次数和调用时间等

除了Monitor之外,所有节点必不可少!

Dubbo支持的注册中心
  1. Zookeeper
    1.1 优点:支持网络集群
    1.2 缺点:稳定性受限于Zookeeper
  2. Redis
    2.1 优点:性能高.
    2.2 缺点:对服务器环境要求较高.
  3. Multicast
    3.1 优点:面中心化,不需要额外安装软件.
    3.2 缺点:建议同机房(局域网)内使用
  4. Simple
    4.1 适用于测试环境.不支持集群
Dubbo支持的协议
  1. Dubbo
    1.1 Dubbo官方推荐的协议.
    1.2 本质:使用NIO和线程池进行处理.
    1.3 缺点:大文件传输时可能出现文件传输失败问题.
  2. RMI
    2.1 JDK提供的协议,远程方法调用协议.
    2.2 缺点:偶尔连接失败.
    2.3 优点:JDK原生,不需要进行额外配置(导入jar)
  3. Hession
    3.1 优点:基于http协议,http请求支持.
    3.2 缺点:需要额外导入jar,并在短连接时性能低

Dubbo开发步骤

配置Provider
引入dubbo依赖

注意去掉老版本spring的依赖,因为在Dubbo2.x以前Spring所有的jar包是一个,之后依赖zookeeper客户端工具zkClient

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>dubbo</artifactId>
     <version>2.5.3</version>
     <exclusions>
         <exclusion>
             <artifactId>spring</artifactId>
             <groupId>org.springframework</groupId>
         </exclusion>
     </exclusions>
 </dependency>
 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
     <version>4.1.6.RELEASE</version>
 </dependency>
 <!-- 访问zookeeper的客户端jar -->
 <dependency>
     <groupId>com.101tec</groupId>
     <artifactId>zkclient</artifactId>
     <version>0.10</version>
 </dependency>
开发Provider常用的配置标签

1.<dubbo:application/> :给provider起名
主要是为了在monitor或管理工具中区别是哪个服务提供者【provider】

2.<dubbo:registry/> :配置注册中心

  • address:注册中心的ip和端口
  • protocol:使用哪种注册中心

3.<dubbo:protocol/>:配置协议

  • name:使用什么协议
  • port:consumer invoke provider时的端口号

4.<dubbo:service/> 注册接口

  • ref:引用接口实现类<bean>的id值
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context.xsd
		http://code.alibabatech.com/schema/dubbo
		http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 给当前Provider自定义个名字 -->
    <dubbo:application name="dubbo-service"/>
    <!-- 配置注册中心  -->
    <dubbo:registry address="192.168.154.128:2181" protocol="zookeeper"></dubbo:registry>
    <!-- 配置端口,注意此标签表示,服务消费方和提供方连接采用dubbo协议 -->
    <!--消费方访问提供方的请求端口是此配置的端口-->
    <dubbo:protocol name="dubbo" port="20888"></dubbo:protocol>
    <!-- 注册功能 -->
    <dubbo:service interface="com.chenfu.dubbo.service.DemoService" ref="demoServiceImpl"></dubbo:service>
    <bean id="demoServiceImpl" class="com.chenfu.dubbo.service.impl.DemoServiceImpl"></bean>

</beans>
启动容器
  • 通过spring方式启动
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
ac.start();
System.out.println("启动成功");
System.in.read();
  • 使用dubbo提供的方式启动
    要求applicationContext-dubbo.xml必须放入类路径下/META-INF/spring/*.xml
Main.main(args);
Dubbo的Consumer配置
引入依赖

在pom.xml中添加dubbo相关3个依赖(接口,dubbo.jar,zkClient)

配置Consumer时常用的标签
 <!-- 给当前Provider自定义个名字 -->
 <dubbo:application name="dubbo-consumer"/>
 <!-- 配置注册中心  -->
 <dubbo:registry address="192.168.154.128:2181" protocol="zookeeper"></dubbo:registry>
 <!-- 配置注解扫描 -->
 <dubbo:annotation package="com.chenfu.service.impl"/>
Admin管理界面

其本质是一个web项目,主要作用就是获取注册中心内Provider注册的信息然后用页面呈现出来。

使用指南
  • 把dubbo-admin-2.5.3.war上传到服务器tomcat中。
  • 启动tomcat完成后关闭tomcat,删除上传的dubbo-admin-2.5.3.war
  • 进入dubbo-admin-2.5.3/WEB-INF/dubbo.properties,修改第一行为zookeeper的ip和端口
  • 修改管理界面的用户名和密码【第二行和第三行】
  • 启动tomcat,在浏览器地址栏访问tomcat中dubbo项目

注意:dubbo-admin-2.5.3.war和jdk1.7兼容,但是与jdk1.8不兼容。网上有很多解决方案。可以直接百度参考。

制作兼容JDK1.8的dubbo-admin

传送门

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章