文章目录

1. 什么是RPC?什么是Dubbo?2. RPC(Remote Procedure Call)3. Dubbo的特点4. Dubbo 设计架构5. Dubbo 环境搭建 之 zookeeper注册中心6. Dubbo 环境搭建 之 控制台管理(admin)7. Dubbo 环境搭建 之 创建 服务提供者 和 服务消费者 工程8. Dubbo 环境搭建 之 服务提供者配置9. Dubbo 环境搭建 之 服务消费者配置10. Dubbo 环境搭建 之 监控中心(Monitor)

提示:使用的dubbo版本是2.6.2版本,zookeeper版本是3.8.0版本。

1. 什么是RPC?什么是Dubbo?

也就是只有分布式的时候才有dubbo这样分布式服务器框架的需求。

Dubbo就像一个治理系统,来处理这些分布式的复杂的逻辑。简而言之,Dubbo就是一个专门处理分布式服务的框架。

分布式系统是若干个独立系统的集合,用户使用起来像是使用一套系统是的。

正常的大公司内部都有自己的一套处理分布式相关的一套系统,目前仅仅学习使用Dubbo而已。

RPC分布式服务器架构模型如下:

了解流动计算架构:

2. RPC(Remote Procedure Call)

RPC是远程过程调用,是一种进程间通信方式,是一种技术思想,不是规范。

RPC就是A服务器调用B服务器相关函数功能(可能传递参数),并且返回相关回调。

RPC过程原理:

RPC两个核心模块:通讯,序列化。序列化为json字符串(也可能序列化为xml格式,但是xml相比较json效率低!),反序列化为对象。

RPC框架有很多,虽然用法不同,但是思想原理都是一样的:

3. Dubbo的特点

Dubbo出生于阿里,后来阿里捐献给了apache基金会。dubbo起源于电商系统,电商系统的架构经历过一系列演变。

Dubbo面向接口的高性能RPC调用:

A服务器调用B功能,只需要在A调用B对应功能的接口就可以了。

Dubbo负载均衡:

例如用户业务系统,就可以均衡的将处理量分配到每一台处理用户业务的服务器,不至于压垮其中一台或者多台。

Dubbo注册中心(服务和发现):

注册中心的作用就是标识哪些服务器是处理用户业务的,哪些服务器处理业务,哪些处理支付等等。同样还是实时感知,一些服务器的状态。

Dubbo运行期流量调用:

就是对于一些请求可以做到很轻松的调用。什么是灰度发布? 就是比如100台服务器要进行升级,可以让其中20台先进行升级,其他的保持原来版本;之后升级的20台没什么问题,就依次渐渐在升级20台;如此往后全部升级,大体上这个过程就是灰度发布。

Dubbo可视化服务治理与运维:

可以通过一些可视化页面啥的,来查询一些数据,状态,配置参数等等操作。

Dubbo支持的协议:

官方推荐dubbo协议,默认端口20880

4. Dubbo 设计架构

Dubbo设计架构如下:

Consumer:消费者就是Web层用户。

Provider:提供者就是业务相关系统。

Container:指的Dubbo框架容器。

Monitor:是监控中心,作用就是监控消费者和服务者的一些信息。

Registry:服务注册与发现的中心,提供目录服务,亦称为服务注册中心。

5. Dubbo 环境搭建 之 zookeeper注册中心

对应注册中心官方介绍网站:https://dubbo.apache.org/zh/docs/v3.0/references/registry/zookeeper/

第一步:官方下载zookeeper。

主要注意的是:

ZooKeeper服务器是用Java创建的,它运行在JVM之上。需要安装JDK 7或更高版本。对于apache-zookeeper-3.8.0-bin.tar.gz包,也可以在window系统上面解压出来,bin下面的zkServer.cmd文件执行。

第二步:配置zoo.cfg文件。

解压后直接启动报一个zoo.cfg file is missing的错误。

在config文件下面,有一个sample样本复制一份,来配置。

注意事项:

window系统启动,要重新设置一下zoo.cfg的dataDir(因为默认是linux系统目录)。dataDir是定义存放临时数据的目录。 (…/data是上级目录的data目录下)

第三步:去zookeeper安装目录bin下面,执行zkServer.cmd启动zookeeper,执行zkCli.cmd进入zookeeper客户端。

第四步:zookeeper常用命令。

ls / :查看当前所有信息。create -e /name value : 创建一个name对应的value。get /name :获取name对应的value。

6. Dubbo 环境搭建 之 控制台管理(admin)

去Dubbo官方的Github上面。

注意:现在有很多分支版本,大部分教学视频或者网页查询都是使用的master-0.2.0分支,如下图: (所以最好git checkout 一下!!使用之前版本对应上。)

新版本可能将dubbo admin单独拿出来了,其他版本也可能是在Dubbo OPS里面(包含dubbo admin和dubbo monitor)。

找到Dubbo Admin,clone下来,

将每个文件的application.properties对应注册中心进行修改:

然后可以mvn clean package进行mvn打包。

因为网络原因遇到一个坑,下载不了nodejs包,见博客https://blog.csdn.net/weixin_43291944/article/details/103998883。mvn clean package编译非常好用!也建议去官方提示步骤运行:

打包后可以在每个对应的target目录下,找到打包后的jar包:

java -jar 包名 :就可以执行的。注意要启动zookeeper注册中心。

开启的时候又遇到一个坑,就是zookeeper 的一些高版本中包含一个AdminServer默认的端口是8080,所以导致8080端口占用,dubbo的jar包没法启动。

解决办法:

方式一:(不推荐,因为dubbo-admin访问不进去…) 修改zookeeper端口,去zoo.cfg文件下面添加admin.serverPort=xxxx。按道理可以,但是试了试admin管理页面进不去!目前没找到原因。 方式二:(推荐使用,因为成功访问了admin管理页面了。) 不修改zookeeper的8080端口,修改dubbo-admin-server目录下面的application.properties文件添加server.port=8070,将其端口号改为8070。自然对应访问页面也就是变成http://localhost:8070/了。

(启动项目的时候,不难看出其实dubbo-admin-server其实就是springboot项目。此外,zookeeper也是使用java写的。)

dubbo-admin是管理页面应该属于Monitor监视部分,就算没有也不影响整个dubbo的工作:

dubbo admin是dubbo的图形页面控制台,具有服务查询、服务治理的功能。

7. Dubbo 环境搭建 之 创建 服务提供者 和 服务消费者 工程

理解服务消费者和服务提供者:

直接点就是,创建一个consumer服务消费者项目工程,再创建一个provider服务提供者项目功能。

consumer项目要调用provider项目的一些功能系统。

这样要通过dubbo将实现它们之间的调用。

注意事项:

因为要传输数据掉接口,所以不同项目之间调用的实体类和接口都是一样的,所以官方推荐创建一个公共项目,该公共项目包含公共的实体类接口等等。这样其他项目只需要依赖公共项目就可以了。

搭建好上面的服务消费者 和 服务提供者相当于完成了下面的部分:

8. Dubbo 环境搭建 之 服务提供者配置

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

1)、导入dubbo依赖(导入对应dubbo版本依赖,这里用的是dubbo2.6.2,因此是apache下面的dubbo,其他版本可能是alibaba版本的dubbo)。 2)、注册中心使用的是zookeeper,引入操作zookeeper的客户端。 服务提供者项目和服务消费者项目导入的依赖:(这里他们必须要用相同版本)

com.alibaba

dubbo

2.6.2

org.apache.curator

curator-framework

2.12.0

3)、测试Dubbo,在服务提供者项目上面创建配置文件,如下:。

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://dubbo.apache.org/schema/dubbo

http://dubbo.apache.org/schema/dubbo/dubbo.xsd

http://code.alibabatech.com/schema/dubbo

http://code.alibabatech.com/schema/dubbo/dubbo.xsd

">

因此,我们这边只需要导入xml文件,在spring中执行就可以了:

package com.itholmes.gmall;

import java.io.IOException;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApplication {

public static void main(String[] args) throws IOException {

ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("provider.xml");

//启动ioc容器

ioc.start();

//system.in.read()方法的作用是从键盘读出一个字符,然后返回它的Unicode码。

int read = System.in.read();

System.out.println(read);

}

}

这样我们执行上面main方法,就可以在dubbo-admin管理页面查询到,我们暴露的服务了。 这样我们就暴露了一个服务提供者的一个接口。(这里使用的是最新版本的dubbo admin管理页面代码)

大部分网页使用如下格式的dubbo admin管理页面代码(github上面master 0.2.0分支版本)

9. Dubbo 环境搭建 之 服务消费者配置

2、将服务消费者去注册中心订阅服务提供者的服务地址

1)、同样先导入相同版本的dubbo和操作zookeeper的curator。2)、创建consumer.xml文件,配置dubbo对应文件。

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

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://dubbo.apache.org/schema/dubbo

http://dubbo.apache.org/schema/dubbo/dubbo.xsd

http://code.alibabatech.com/schema/dubbo

http://code.alibabatech.com/schema/dubbo/dubbo.xsd

">

这样我们就可以测试Spring相关容器里面的内容:

下面是Service调用的相关代码:

package com.itholmes.gmall.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.itholmes.gmall.bean.UserAddress;

import com.itholmes.gmall.service.OrderService;

import com.itholmes.gmall.service.UserService;

/**

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

* 1)、导入dubbo依赖(导入对应dubbo版本依赖,这里用的是dubbo3,因此是apache下面的dubbo,其他版本可能是alibaba版本的dubbo)。

* 2)、注册中心使用的是zookeeper,引入操作zookeeper的客户端。

* 3)、配置服务提供者。

* 2、将服务消费者去注册中心订阅服务提供者的服务地址

* @author Administrator

*

*/

@Service//这里使用spring的Service,不用dubbo的Service。

public class OrderServiceImpl implements OrderService {

@Autowired

UserService userService;

public void initOrder(String userId) {

// TODO Auto-generated method stub

System.out.println("用户ID:"+userId);

//1.查询用户的收货地址,也就是调用user-service-provider项目中的查询收货地址的功能

List list = userService.getUserAddressList(userId);

for(UserAddress user:list) {

System.out.println(user);

}

}

}

创建一个main方法来测试,是否能调用成功:

package com.itholmes.gmall;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.itholmes.gmall.service.OrderService;

public class MainApplication {

public static void main(String[] args) throws IOException {

ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("consumer.xml");

OrderService bean = ioc.getBean(OrderService.class);

//调用容器里面的Service方法

bean.initOrder("1");

System.out.println("调用完成...");

System.in.read();

}

}

10. Dubbo 环境搭建 之 监控中心(Monitor)

第一步:同样对应dubbo ops里面的master-0.2.0版本,下载dubbo-monitor:

第二步:直接进行mvn package打包操作,生成dubbo-monitor监控中心:

注意是要解压打包后的压缩包。

这样解压出来的文件就是一个简易的监控中心了:

第三步:去conf文件,配置dubbo.properties文件:

dubbo.container=log4j,spring,registry,jetty-monitor

dubbo.application.name=simple-monitor

dubbo.application.owner=dubbo

#dubbo.registry.address=multicast://224.5.6.7:1234

#zookeeper的注册中心的地址

dubbo.registry.address=zookeeper://127.0.0.1:2181

#也可以是其他注册中心的地址

#dubbo.registry.address=redis://127.0.0.1:6379

#dubbo.registry.address=dubbo://127.0.0.1:9090

#protocol协议端口号,是其他服务与dubbo-monitor监控中心的通信端口

dubbo.protocol.port=7070

#监控中心Web页面的访问地址

dubbo.jetty.port=8888

dubbo.jetty.directory=${user.home}/monitor

dubbo.charts.directory=${user.home}/monitor/charts

dubbo.statistics.directory=${user.home}/monitor/statistics

dubbo.log4j.file=logs/dubbo-monitor-simple.log

dubbo.log4j.level=WARN

第四步:去assembly.bin目录下,启动dubbo-monitor。

第五步:给服务消费者和服务提供者的spring配置文件上面,配置上监控中心dubbo-monitor相关信息。

可以去官方搜一下dubbo:xxx一些标签,找到对应参考手册,全是相关dubbo标签相关配置。

这样我们重新启动一下之前测试用的两个main方法,再查看dubbo-monitor监控中心页面:

文章链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: