Dubbo

2019/09/17 分布式 共 3715 字,约 11 分钟

dubbo

Apache Dubbo™ 是一款高性能Java RPC框架, 官网的说明。

dubbo是什么

随着互联网的发展,单一应用无法满足企业的要求,因而出现了系统的垂直拆分,用以保证系统的扩展性,这种依据模块进行拆分的方式,会导致一些多处使用的部分重复部署,因而将前端模块拆出,将服务模块共享的分布式服务架构出现了,方便了不同模块之间的互调,但随着服务越来越多,服务之间的关系越来越乱,就急需一种服务的治理框架,这个框架就是dubbo。

1568774212623

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)[ Service Oriented Architecture]是关键

1568778237778

RPC

RPC【Remote ProcedureCall】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

dubbo就是基于RPC的,而另一个微服务架构springcloud 是基于http协议的 restful api

1568778395391

1568778414699

RPC两个核心模块:通讯,序列化。 所以一个RPC框架好不好主要看他的通讯协议快不快,还有序列化效率高不高。

dubbo核心概念

Apache Dubbo (incubating)ˈdʌbəʊ是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

官网:http://dubbo.apache.org/

1568778553975

服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。

服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者

监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

Ø 调用关系说明

l 服务容器负责启动,加载,运行服务提供者。

l 服务提供者在启动时,向注册中心注册自己提供的服务。

l 服务消费者在启动时,向注册中心订阅自己所需的服务。

l 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

l 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

l 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

dubbo环境搭建

服务提供方将服务注册到注册中心,然后被服务调用方发现并进行消费,因而首先你得有个注册中心。

dubbo的注册中心,官方推荐zookeeper, so 使用zookeeper。

zookeeper官网:https://zookeeper.apache.org/

安装zookeeper

下载zookeeper

1568789214476

1568789248175

1568789276216

自己选择版本进行下载,这里我们下载3.4.11.

并上传到服务器进行解压。上传目录为 /opt/

解压命令没忘吧 tar -zxvf zookeeper-3.4.11.tar.gz

1568789887486

得到加压后的文件夹,OK。 移动到 /usr/local/

mv /opt/zookeeper-3.4.11 /usr/local/zookeeper-3.4.11

1568790034633

进入文件夹目录中的conf文件夹,修改配置文件,zoo_sample.cfg复制一份命名问zoo.cfg

1568790295854

打开zoo.cfg,并修改数据保存位置,记住端口号为2181

1568790428198

进入bin目录

1568790537585

执行启动命令,启动成功。再查看一下启动状态,没毛病。

1568790609863

OK,zookeeper安装并启动成功了。

安装dubbo-admin管理控制台

这个是一个通过图形化页面的形式来让我们直观的监控服务的项目。dubbo已经写好了,我们只需要拿过来跑起来就能对服务进行监控了。

github上搜 dubbo-admin,下载。

1568792399523

看了一下,最新的admin,是前后端分离的项目,从最早的war,到jar包,再到现在的前后端分离boot+vue。

技术飞速发展啊,不学就要挨打。

下载好后解压,红框的分别是后台和前端

1568863701441

启动dubbo-admin前端

进入dubbo-admin-ui目录,在目录上输入cmd进入命令行

前端加载依赖 npm install。需要安装node.js。不懂得自己去看vue

1568793576328

引入完后 执行 npm run dev

1568863449490

看到这个表示页面启动成功,浏览器输入地址,可以看到dubbo-admin的管理页面了。当然是没有数据的,因为后台根本就没有启动。感觉还是喜欢老版的啊。

1568863568507

启动dubbo-admin后台

进入dubbo-admin-server,修改配置文件,填写你的zookeeper地址

1568864217991

然后进入命令行

输入 mvn clean package 使用maven进行打包。没有安装maven自己去安装。

这里需要注意一下,新版的dubbo需要java1.8

1568863945073

打包完成后进入target目录,启动jar包

1568864061603

好了,现在后台已经与zookeeper连接上了,然后前端通过异步请求从后台获取数据。

现在前端没什么反应是因为并没有服务被发布。

springboot+dubbo服务端

开始提供服务。因为dubbo的服务提供方和消费方都会用到服务接口和实体类,我们将都会用到的提取到一个模块中,以便于重用。

创建maven项目,写个服务接口,写个实体类。OK。

1568865417217

在创建服务提供方,依赖interface模块,和dubbo所需依赖。

<dependency>
 <groupId>com.pansky</groupId>
 <artifactId>dubbo-interface</artifactId>
 <version>1.0-SNAPSHOT</version>
</dependency>

<dependency>
 <groupId>org.apache.dubbo</groupId>
 <artifactId>dubbo-spring-boot-starter</artifactId>
 <version>2.7.3</version>
</dependency>
<dependency>
 <groupId>org.apache.dubbo</groupId>
 <artifactId>dubbo-dependencies-zookeeper</artifactId>
 <version>2.7.3</version>
 <type>pom</type>
 <exclusions>
     <exclusion>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-log4j12</artifactId>
     </exclusion>
 </exclusions>
</dependency>
2、配置application.properties
提供者配置:
dubbo.application.name=gmall-user
dubbo.registry.protocol=zookeeper 
dubbo.registry.address=192.168.67.159:2181
dubbo.scan.base-package=com.atguigu.gmall
dubbo.protocol.name=dubbo

application.name就是服务名,不能跟别的dubbo提供端重复

registry.protocol 是指定注册中心协议

registry.address 是注册中心的地址加端口号

protocol.name 是分布式固定是dubbo,不要改。

base-package 注解方式要扫描的包

消费者配置:
dubbo.application.name=gmall-order-web
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.67.159:2181
dubbo.scan.base-package=com.atguigu.gmall
dubbo.protocol.name=dubbo

springboot+dubbo消费方

dubbo配置说明

###

文档信息

Search

    Table of Contents