Day171.基本内容 -Dubbo

dubbo

基础知识

一、分布式基础理论

1、什么是分布式系统?

《分布式系统原理与范型》定义:

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统

  • 分布式系统(distributed system)是建立在网络之上的软件系统。

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。


2、发展演变

架构演变图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AUx85zK6-1611329642912)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122115025127.png)]


->单一应用架构【ORM】

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用简化增删改查工作量的数据访问框架(ORM)是关键。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XG7q7XqV-1611329625137)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122121131578.png)]

优点

适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。

缺点

1、性能扩展比较难 ,会使的服务器越来越臃肿

2、协同开发问题

3、不利于升级维护


->垂直应用架构【MVC】

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJ6BIVqS-1611329625145)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122121125522.png)]

优点

1、通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更方便,更有针对性。

2、界面+业务逻辑的实现分离

缺点

1、公用模块无法重复利用,开发性的浪费

2、应用之间不可能完全独立,大量的应用之间需要交互


->分布式服务架构【RPC】

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的** 分布式服务框架(RPC) **是关键

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q0wUcdJg-1611329625148)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122121200306.png)]

需要解决模块与模块之间如何网络调用的问题


->流动计算架构【SOA】

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wU7rB1jc-1611329625153)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122122950869.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h6Ueauuz-1611329625154)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122122926630.png)]


3、RPC

->什么叫RPC

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

->RPC基本原理

stub:小助手

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a471pwnG-1611329625156)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122123026917.png)]


RPC流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t78MGuOm-1611329625157)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122123045087.png)]

RPC两个核心模块

通讯序列化&反序列化


二、dubbo核心概念

1、简介

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

官网

http://dubbo.apache.org/

2、基本概念

基本应用架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IKlstCCa-1611329625159)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122130443548.png)]

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

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

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

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


–>调用关系说明

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

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

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

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

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

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


三、dubbo环境搭建

1、【windows】-安装zookeeper

1.1、下载zookeeper

网址 https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/

1.2、解压zookeeper

解压运行zkServer.cmd ,初次运行会报错,没有zoo.cfg配置文件

1.3、修改zoo.cfg配置文件

将conf下的zoo_sample.cfg复制一份改名为zoo.cfg即可。

注意几个重要位置

  • dataDir=./

    • 临时数据存储的目录(可写相对路径)
  • clientPort=2181

    • zookeeper的端口号

修改完成后再次启动zookeeper

1.4、使用zkCli.cmd测试
  • ls /:

    • 列出zookeeper根下保存的所有节点
  • create –e /achang123:

    • 创建一个achang节点,值为123,-e为设置这个位暂时的节点,重机后删除
  • get /achang:


2、【windows】-安装dubbo-admin管理控制台

dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以你不用在Linux上启动什么dubbo服务。

但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。

2.1、下载dubbo-admin

https://github.com/apache/dubbo-admin/tree/master

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tMgczcTx-1611329625162)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122141549768.png)]


2.2、进入目录,修改dubbo-admin配置

修改 src\main\resources\application.properties

指定zookeeper地址【保证在运行admin页面时,zookeeper必须也是启动的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F0O1PsB9-1611329625163)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122141617837.png)]


2.3、打包dubbo-admin
mvn clean package -Dmaven.test.skip=true 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qy2xMnzx-1611329625165)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122141736196.png)]


2.4、运行dubbo-admin
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bPsrM3XU-1611329625167)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122141833727.png)]

注意:【有可能控制台看着启动了,但是网页打不开,需要在控制台按下ctrl+c即可】


2.5、访问dubbo-admin

必须要求Zookeeper是启动状态不然登录不了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qjXc8hzF-1611329625168)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122142018541.png)]

通过localhost:7001来访问

账号密码认使用root/root 登陆

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TI2xErEI-1611329625170)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122141923172.png)]


3、【linux】-安装zookeeper

3.1、安装jdk

1)、下载jdk

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x0sD7HKY-1611329625171)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122142653682.png)]

不要使用wget命令获取jdk链接,这是认不同意,导致下载来的jdk压缩内容错误

2)、上传到服务器并解压

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ofeMd42-1611329625172)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122142719218.png)]

3)、设置环境变量

/usr/local/java/jdk1.8.0_171

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UU059X2p-1611329625174)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122142735579.png)]

文件末尾加入下面配置

export JAVA_HOME=/usr/local/java/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLAsspATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7raUqlLE-1611329625175)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122142743688.png)]

4)、使环境变量生效&测试JDK
java -version

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f0udfMuT-1611329625176)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122142859025.png)]


3.2、安装zookeeper

1)、下载zookeeper

网址 https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/

wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz

2)、解压

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F4IFF1CN-1611329625178)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122142950039.png)]

3)、移动到指定位置并改名为zookeeper

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zqD0KwLD-1611329625179)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122143020228.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-seEhPzYn-1611329625181)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122143024187.png)]

3.3、开机启动zookeeper

1)-复制如下脚本

#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
ZK_PATH=/usr/local/zookeeper
export JAVA_HOME=/usr/local/java/jdk1.8.0_171
case $1 in
         start) sh  $ZK_PATH/bin/zkServer.sh start;;
         stop)  sh  $ZK_PATH/bin/zkServer.sh stop;;
         status) sh  $ZK_PATH/bin/zkServer.sh status;;
         restart) sh $ZK_PATH/bin/zkServer.sh restart;;
         *)  echo "require start|stop|status|restart"  ;;
esac

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7wUqN6JH-1611329625182)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122143131876.png)]

2)-把脚本注册为Service

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3RYBlWrh-1611329625183)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122143153749.png)]

3)-增加权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcJJlKQ3-1611329625184)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122143212228.png)]


3.4、配置zookeeper

1)、初始化zookeeper配置文件

拷贝/usr/local/zookeeper/conf/zoo_sample.cfg

到同一个目录下改个名字叫zoo.cfg

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dQ16bS0W-1611329625185)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122143240579.png)]

2)、启动zookeeper
service zookeeper start

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DqdWP4oy-1611329625187)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122143251651.png)]


4、【linux】-安装dubbo-admin管理控制台

4.1、安装Tomcat8(旧版dubbo-admin是war,新版是jar不需要安装Tomcat)

1)、下载Tomcat8并解压

https://tomcat.apache.org/download-80.cgi

wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz

2)、解压移动到指定位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lqkOg3cE-1611329625188)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122143412666.png)]

3)、开机启动tomcat8

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RDrX1EKz-1611329625189)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122143423945.png)]

复制如下脚本:

#!/bin/bash
#chkconfig:2345 21 90
#description:apache-tomcat-8
#processname:apache-tomcat-8
CATALANA_HOME=/opt/apache-tomcat-8.5.32
export JAVA_HOME=/opt/java/jdk1.8.0_171
case $1 in
start)
    echo "Starting Tomcat..."  
    $CATALANA_HOME/bin/startup.sh
    ;;

stop)
    echo "Stopping Tomcat..."  
    $CATALANA_HOME/bin/shutdown.sh
    ;;

restart)
    echo "Stopping Tomcat..."  
    $CATALANA_HOME/bin/shutdown.sh
    sleep 2
    echo  
    echo "Starting Tomcat..."  
    $CATALANA_HOME/bin/startup.sh
    ;;
*)
    echo "Usage: tomcat {start|stop|restart}"  
    ;; esac
4)、注册服务&添加权限

在这里插入图片描述

5)、启动服务&访问tomcat测试

在这里插入图片描述


4.2、安装dubbo-admin

如上【windows】方法


.

四、dubbo-helloworld

1、提出需求

某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址;

我们现在 需要创建两个服务模块进行测试

模块功能
订单服务web模块创建订单等
用户服务service模块查询用户地址等

测试预期结果:

​ 订单服务web模块在A服务器,用户服务模块在B服务器,A可以远程调用B的功能

2、工程架构

根据 dubbo《服务化最佳实践》

1、分包

建议将服务接口,服务模型,服务异常等均放在 API 包中,因为服务模型及异常也是 API 的一部分,同时,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。

如果需要,也可以考虑在 API 包中放置一份 spring 的引用配置,这样使用方,只需在 spring 加载过程中引用此配置即可,配置建议放在模块的包目录下,以免冲突,如:com/alibaba/china/xxx/dubbo-reference.xml。

2、粒度

服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能一个步骤,否则将面临分布式事务问题,dubbo 暂未提供分布式事务支持

服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸

不建议使用过于抽象的通用接口,如:Map query(Map),这样的接口没有明确语义,会给后期维护带来不便。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7K8LOxIX-1611329625196)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122152720648.png)]

3、创建模块

3.1、gmall-interface:公共接口层(model,service,exception…)

作用:定义公共接口,也可以导入公共依赖

1)、Bean模型
public class UserAddress implements Serializable{
    private Integer id;
    private String userAddress;
    private String userId;
    private String consignee;
    private String phoneNum;
    private String isDefault;
}
2)、Service接口
public interface UserService {
    //按照用户id返回所有的收货地址
	public List<UserAddress> getUserAddressList(String userId);
}

public interface OrderService {
    //初始化订单
    public void initOrder(String userId);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PN0fWzqk-1611329625198)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122153022869.png)]


3.2、order-service-consumer:用户模块(对用户接口的实现)

1)、pom.xml

引入上面的公共模块中的bean和接口

<dependency>
    <groupId>org.achang</groupId>
    <artifactId>gmall-interface</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
2)、Service
public class UserServiceImpl implements UserService {
    public List<UserAddress> getUserAddressList(String userId) {
        UserAddress userAddress1 = new UserAddress(1, "温州市1楼", "1", "郑老师", "112233445566", "Y");
        UserAddress userAddress2 = new UserAddress(2, "温州市2楼", "2", "昌老师", "778899665544", "Y");
        
        return Arrays.asList(userAddress1,userAddress2);
    }
}

3.3、user-service-provider:订单模块(调用用户模块)

1)、pom.xml

引入上面的公共模块中的bean和接口

<dependency>
    <groupId>org.achang</groupId>
    <artifactId>gmall-interface</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
2、service

订单模块调用公共接口层的getUserAddressList(),自己模块是没有写这个方法的实现类的,所有调用是失败的

public class OrderServiceImpl implements OrderService {
    UserService userService;
    public void initOrder(String userId) {
        //1、查询用户收货地址
        List<UserAddress> userAddressList = userService.getUserAddressList(userId);
        System.out.println(userAddressList);
    }
}

在这样是无法进行调用的。我们user-service-provider引入了gmall-interface,但是interface的实现是order-service-consumer,我们并没有引入,而且实际他可能还在别的服务器中。


4、使用dubbo改造

4.1、改造gmall-user作为服务提供者

1)、引入dubbo
<!-- 引入dubbo -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.2</version>
</dependency>

<!-- 注册中心使用的是Zookeeper -->
<!-- 
dubbo 2.6以前的版本引入zkclient操作zookeeper 
dubbo 2.6及以后的版本引入curator操作zookeeper
-->
<!-- 引入zookeeper的客户端-->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.12.0</version>
</dependency>

<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>1.7.2</version>
    <scope>compile</scope>
</dependency>
2)、配置提供者
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       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">

    <!-- 1、指定当前服务/应用的名字 (同样的服务名字相同,不要和别的服务同名)-->
    <dubbo:application name="user-service-provider"></dubbo:application>
    <!-- 2、指定注册中心的位置-->
<!--    <dubbo:registry address="zookeeper://127.0.0.1:2181"/> 或 -->
    <dubbo:registry protocol="zookeeper" address="localhost:2181" ></dubbo:registry>

    <!-- 3、指定通信规则(通信协议?通信端口(任意指定))-->
    <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>

    <!-- 4、声明需要暴露的服务接口 -->
    <dubbo:service interface="com.achang.gmall.service.UserService" ref="userServiceImpl" ></dubbo:service>

    <!-- 5、和本地bean一样实现服务 -->
    <bean id="userServiceImpl" class="com.achang.gmall.service.impl.UserServiceImpl"></bean>

</beans>
3)、启动服务
public class MainApplication {
    public static void main(String[] args) throws IOException {
        ClasspathXmlApplicationContext ioc = new ClasspathXmlApplicationContext("provider.xml");
        ioc.start();

        system.in.read();
    }
}

注意:

1、要在命令行窗口输出回车,让他继续走,不然会卡住

在这里配置时address属性配置127.0.0.1没用,会报服务器拒绝访问的错误

无法访问http://localhost:7001/

改成localhost就好了

2、我使用的是idea,需要在pom.xml中也要加入slf4j的依赖,不然会报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HSYZYGR6-1611329625200)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122172652115.png)]


4.2、改造order-service-consumer作为服务消费者

1)、引入dubbo
<dependency>
    <groupId>org.achang</groupId>
    <artifactId>gmall-interface</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

<!-- 引入dubbo -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.2</version>
</dependency>

<!-- 注册中心使用的是Zookeeper -->
<!-- 引入zookeeper的客户端-->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.12.0</version>
</dependency>


<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>1.7.2</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.16.RELEASE</version>
    <scope>compile</scope>
</dependency>
2)、配置消费者信息
<context:component-scan base-package="com.achang.gmall.service.impl"/>

<!-- 1、消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="order-service-consumer"></dubbo:application>

<!-- 2、使用zookeeper广播注册中心暴露发现服务地址,注册中心地址 -->
<dubbo:registry address="zookeeper://localhost:2181" ></dubbo:registry>

<!-- 3、生成远程服务代理,可以和本地bean一样使用d -->
<dubbo:reference id="userService"interface="com.achang.gmall.service.UserService"></dubbo:reference>

3)、测试调用

public class MainApplication {
    public static void main(String[] args) throws IOException {
        ClasspathXmlApplicationContext context = new ClasspathXmlApplicationContext("consumer.xml");
        context.start();
        OrderService orderService = (OrderService) context.getBean(OrderService.class);
        orderService.initOrder("1");

        System.out.println("调用完成。。。。");
        system.in.read();
    }
    
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NkaXyGfT-1611329625201)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122183859004.png)]

访问gmall-order-web的initOrder请求,会调用UserService获取用户地址;

调用成功。说明我们order已经可以调用远程的UserService了;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fiJ5jXs9-1611329625204)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122183919444.png)]

5、监控中心

5.1)、dubbo-admin

图形化的服务管理页面;安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理

5.2)、dubbo-monitor-simple

简单的监控中心;

5.2.1、安装

5.2.1.1、下载 dubbo-ops

https://github.com/apache/incubator-dubbo-ops

5.2.1.2、修改配置指定注册中心地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5akvIH03-1611329625206)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122232901208.png)]

dubbo-monitor-simple打包通过

mvn package

生成的↓

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P9CheuRg-1611329625207)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122232953060.png)]

进入 dubbo-monitor-simple\src\main\resources\conf

修改 dubbo.properties文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ThjKe6uY-1611329625209)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122233000659.png)]

5.2.1.3、打包dubbo-monitor-simple
mvn clean package -Dmaven.test.skip=true
5.2.1.4、解压 tar.gz 文件,并运行start.bat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-baoXVrpD-1611329625210)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122233047730.png)]

如果缺少servlet-api,自行导入servlet-api再访问监控中心

5.2.1.5、启动访问8080

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNPvAhdW-1611329625211)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20210122233108806.png)]

5.2.2、监控中心配置

在消费者和提供者的配置文件中都配置

所有服务配置连接监控中心,进行监控统计
    <!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 -->
    <dubbo:monitor protocol="registry"></dubbo:monitor>
    <!--或<dubbo:monitor address="localhost:7070"></dubbo:monitor>-->

Simple Monitor 挂掉不会影响到 Consumer 和 Provider 之间的调用,所以用于生产环境不会有风险。

Simple Monitor 采用磁盘存储统计信息,请注意安装机器的磁盘限制,如果要集群,建议用mount共享磁盘。

相关文章

在网络请求时,总会有各种异常情况出现,我们需要提前处理这...
作者:宇曾背景软件技术的发展历史,从单体的应用,逐渐演进...
hello,大家好呀,我是小楼。最近一个技术群有同学at我,问我...
 一个软件开发人员,工作到了一定的年限(一般是3、4年左右...
当一个服务调用另一个远程服务出现错误时的外观Dubbo提供了多...
最近在看阿里开源RPC框架Dubbo的源码,顺带梳理了一下其中用...