• Dubbo学习笔记


    0分布式系统概念

    0.1大型互联网互联网项目特点

    •用户多

    •流量大,并发高

    •海量数据

    •易受攻击

    •功能繁琐

    •变更快

    0.2大型互联网项目架构目标

    高性能:提供快速的访问体验。

    高可用:网站服务一直可以正常访问。

    可伸缩:通过硬件增加/减少,提高/降低处理能力。

    高可扩展:系统间耦合低,方便的通过新增/移除方式,增加/减少新的功能/模块。

    安全性:提供网站安全访问和数据加密,安全存储等策略。

    敏捷性:随需应变,快速响应。

    0.3集群

    很多“人”一起 ,干一样的事
    一个业务模块,部署在多台服务器上。

    0.4分布式

    很多“人”一起,干不一样的事。这些不一样的事,合起来是一件大事。
    一个大的业务系统,拆分为小的业务模块,分别部署在不同的机器上

    0.5单机、集群、集群分布式

    单体架构
    在这里插入图片描述
    集群
    在这里插入图片描述集群分布式
    在这里插入图片描述

    0.6架构演进

    在这里插入图片描述

    0.6.1单体架构

    在这里插入图片描述

    0.6.2垂直架构

    在这里插入图片描述

    0.6.3分布式架构

    在这里插入图片描述

    0.6.4soa架构

    在这里插入图片描述

    0.6.4微服务架构

    在这里插入图片描述

    1.Dubbo概述

    1.1Dubbo

    Dubbo是高性能、轻量级的javaRPC框架
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1.2Dubbo架构

    在这里插入图片描述

    节点角色说明:

    • Provider:暴露服务的服务提供方
    • Container:服务运行容器
    • Consumer:调用远程服务的服务消费方
    • Registry:服务注册与发现的注册中心 (zookeeper,nacos)
    • Monitor:统计服务的调用次数和调用时间的监控中心

    2.Dubbo快速入门

    2.1Zookeeper安装(服务注册中心来用,可以用nacos)

    2.1.1下载安装

    1、环境准备

    ZooKeeper服务器是用Java创建的,它运行在JVM之上。需要安装JDK 7或更高版本。

    2、上传

    将下载的ZooKeeper放到/opt/ZooKeeper目录下

    
    #上传zookeeper alt+p
    put f:/setup/apache-zookeeper-3.5.6-bin.tar.gz
    #打开 opt目录
    cd /opt
    #创建zooKeeper目录
    mkdir  zooKeeper
    #将zookeeper安装包移动到 /opt/zooKeeper
    mv apache-zookeeper-3.5.6-bin.tar.gz /opt/zookeeper/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3、解压

    将tar包解压到/opt/zookeeper目录下

    tar -zxvf apache-ZooKeeper-3.5.6-bin.tar.gz 
    
    • 1

    在这里插入图片描述

    2.2.2 配置启动

    1、配置zoo.cfg

    进入到conf目录拷贝一个zoo_sample.cfg并完成配置

    #进入到conf目录
    cd /opt/zooKeeper/apache-zooKeeper-3.5.6-bin/conf/
    #拷贝
    cp  zoo_sample.cfg  zoo.cfg
    
    • 1
    • 2
    • 3
    • 4

    修改zoo.cfg

    vim zoo.cfg
    
    • 1
    #打开目录
    cd /opt/zooKeeper/
    #创建zooKeeper存储目录
    mkdir  zkdata
    #修改zoo.cfg
    vim /opt/zooKeeper/apache-zooKeeper-3.5.6-bin/conf/zoo.cfg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    修改存储目录:dataDir=/opt/zookeeper/zkdata
    在这里插入图片描述

    2、启动ZooKeeper
    在这里插入图片描述

    cd /opt/zooKeeper/apache-zooKeeper-3.5.6-bin/bin/
    #启动
     ./zkServer.sh  start
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    看到上图表示ZooKeeper成功启动

    3、查看ZooKeeper状态

    ./zkServer.sh status
    
    • 1

    zookeeper启动成功。standalone代表zk没有搭建集群,现在是单节点

    在这里插入图片描述

    2.2Dubbo快速入门代码编写

    在这里插入图片描述

    2.2.1Service

    1. 引入依赖
        <properties>
            <spring.version>5.1.9.RELEASEspring.version>
            <dubbo.version>2.7.4.1dubbo.version>
            <zookeeper.version>4.0.0zookeeper.version>
    
        properties>
    
        <dependencies>
            
            <dependency>
                <groupId>javax.servletgroupId>
                <artifactId>javax.servlet-apiartifactId>
                <version>3.1.0version>
                <scope>providedscope>
            dependency>
            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-contextartifactId>
                <version>${spring.version}version>
            dependency>
            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-webmvcartifactId>
                <version>${spring.version}version>
            dependency>
    
            
            <dependency>
                <groupId>org.slf4jgroupId>
                <artifactId>slf4j-apiartifactId>
                <version>1.7.21version>
            dependency>
            <dependency>
                <groupId>org.slf4jgroupId>
                <artifactId>slf4j-log4j12artifactId>
                <version>1.7.21version>
            dependency>
    
            
            <dependency>
                <groupId>org.apache.dubbogroupId>
                <artifactId>dubboartifactId>
                <version>${dubbo.version}version>
            dependency>
            
            <dependency>
                <groupId>org.apache.curatorgroupId>
                <artifactId>curator-frameworkartifactId>
                <version>${zookeeper.version}version>
            dependency>
            
            <dependency>
                <groupId>org.apache.curatorgroupId>
                <artifactId>curator-recipesartifactId>
                <version>${zookeeper.version}version>
            dependency>
            
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    1. 编写代码
    package com.jq.service.iml;
    
    import com.jq.service.UserService;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserServiceImpl implements UserService {
        public String sayHello() {
            return "hello Dubbo!";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.2.2web

    1. 依赖
      端口8000可能被占用报错,改一下端口即可
    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
    
        <groupId>com.jqgroupId>
        <artifactId>dubbo-webartifactId>
        <version>1.0-SNAPSHOTversion>
        <packaging>warpackaging>
    
        <properties>
            <spring.version>5.1.9.RELEASEspring.version>
            <dubbo.version>2.7.4.1dubbo.version>
            <zookeeper.version>4.0.0zookeeper.version>
    
        properties>
    
        <dependencies>
            <dependency>
                <groupId>com.jqgroupId>
                <artifactId>dubbo-serviceartifactId>
                <version>1.0-SNAPSHOTversion>
            dependency>
            
            <dependency>
                <groupId>javax.servletgroupId>
                <artifactId>javax.servlet-apiartifactId>
                <version>3.1.0version>
                <scope>providedscope>
            dependency>
            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-contextartifactId>
                <version>${spring.version}version>
            dependency>
            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-webmvcartifactId>
                <version>${spring.version}version>
            dependency>
    
            
            <dependency>
                <groupId>org.slf4jgroupId>
                <artifactId>slf4j-apiartifactId>
                <version>1.7.21version>
            dependency>
            <dependency>
                <groupId>org.slf4jgroupId>
                <artifactId>slf4j-log4j12artifactId>
                <version>1.7.21version>
            dependency>
    
            
            <dependency>
                <groupId>org.apache.dubbogroupId>
                <artifactId>dubboartifactId>
                <version>${dubbo.version}version>
            dependency>
            
            <dependency>
                <groupId>org.apache.curatorgroupId>
                <artifactId>curator-frameworkartifactId>
                <version>${zookeeper.version}version>
            dependency>
            
            <dependency>
                <groupId>org.apache.curatorgroupId>
                <artifactId>curator-recipesartifactId>
                <version>${zookeeper.version}version>
            dependency>
    
        dependencies>
    
    
        <build>
            <plugins>
                
                <plugin>
                    <groupId>org.apache.tomcat.mavengroupId>
                    <artifactId>tomcat7-maven-pluginartifactId>
                    <version>2.1version>
                    <configuration>
                        <port>8089port>
                        <path>/path>
                    configuration>
                plugin>
            plugins>
        build>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    1. 编写代码
    package com.jq.controller;
    
    
    import com.jq.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
        @Autowired
        private UserService userService;
    
        @RequestMapping("/sayHello")
        public String sayHello(){
            return userService.sayHello();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    启动
    在这里插入图片描述

    2.3代码改造1

    在这里插入图片描述

    import org.apache.dubbo.config.annotation.Service;
    @Service //将这个类提供的方法(服务)对外发布,将访问的IP,端口,路径注册到注册中心
    
    • 1
    • 2

    2.3.1service配置

    
    <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" xmlns:context="http://www.springframework.org/schema/context"
    	   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://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    
    	
    
    
    	<dubbo:application name="dubbo-service"/>
    
    	<dubbo:registry address="zookeeper:/192.168.56.10:2181"/>
    
    	<dubbo:annotation package="com.jq.service.iml"/>
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.3.2web改造

    删除pom依赖
    删除webxml spring的

    package com.jq.controller;
    
    
    import com.jq.service.UserService;
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
        //@Autowired 本地注入
       
        /**
         * @Reference
         *  1.从zookeeper注册中心中获取userService的访问url
         *  2.进行远程调用RPC
         *  3.将结果封装为一个代理对象,给变量赋值
         */
        @Reference //远程注入
        private UserService userService;
    
        @RequestMapping("/sayHello")
        public String sayHello(){
            return userService.sayHello();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    配置

    
    <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"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
             http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    
        <mvc:annotation-driven/>
        <context:component-scan base-package="com.jq.controller"/>
    
        
        
        <dubbo:application name="dubbo-web"/>
        
        <dubbo:registry address="zookeeper://192.168.56.10:2181"/>
        
        <dubbo:annotation package="com.jq.controller"/>
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述

    2.4代码改造2

    在这里插入图片描述
    创建公共模块,删除web,service的UserService接口

    package com.jq.service;
    
    public interface UserService {
        public String sayHello();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    3.Dubbo高级特性

    3.1dubbo-admin管理平台(服务监控中心)

    • dubbo-admin 管理平台,是图形化的服务管理页面
    • 从注册中心中获取到所有的提供者 / 消费者进行配置管理
    • 路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能
    • dubbo-admin 是一个前后端分离的项目前端使用vue,后端使用springboot 安装 dubbo-admin 其实就是部署该项目

    3.2dubbo-admin安装

    1、环境准备

    dubbo-admin 是一个前后端分离的项目。前端使用vue,后端使用springboot,安装 dubbo-admin 其实就是部署该项目。我们将dubbo-admin安装到开发环境上。要保证开发环境有jdk,maven,nodejs

    安装node**(如果当前机器已经安装请忽略)**

    因为前端工程是用vue开发的,所以需要安装node.js,node.js中自带了npm,后面我们会通过npm启动

    下载地址

    https://nodejs.org/en/
    
    • 1

    2、下载 Dubbo-Admin

    建议下载最新版本的Dubbo-Admin,否则会出现各种bug

    进入github,搜索dubbo-admin

    https://github.com/apache/dubbo-admin
    
    • 1

    3、把下载的zip包解压到指定文件夹(解压到那个文件夹随意)

    4、修改配置文件

    解压后我们进入…\dubbo-admin-develop\dubbo-admin-server\src\main\resources目录,找到 application.properties 配置文件 进行配置修改

    修改zookeeper地址

    # centers in dubbo2.7
    admin.registry.address=zookeeper://192.168.149.135:2181
    admin.config-center=zookeeper://192.168.149.135:2181
    admin.metadata-report.address=zookeeper://192.168.149.135:2181
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    admin.registry.address注册中心
    admin.config-center 配置中心
    admin.metadata-report.address元数据中心

    5、打包项目

    在 dubbo-admin-develop 目录执行打包命令

    mvn  clean package
    
    • 1

    在这里插入图片描述

    6、启动后端

    切换到目录

    dubbo-Admin-develop\dubbo-admin-distribution\target>
    
    • 1

    执行下面的命令启动 dubbo-admin,dubbo-admin后台由SpringBoot构建。

    java -jar .\dubbo-admin-0.5.jar
    
    • 1

    7、前台后端

    dubbo-admin-ui 目录下执行命令

    npm run dev
    
    • 1

    8、访问

    浏览器输入。用户名密码都是root

    http://localhost:8081/
    
    • 1

    3.3dubbo-admin简单使用

    注意:Dubbo Admin【服务Mock】【服务统计】将在后续版本发布…

    在上面的步骤中,我们已经进入了Dubbo-Admin的主界面,在【快速入门】章节中,我们定义了服务生产者、和服务消费者,下面我们从Dubbo-Admin管理界面找到这个两个服务

    1、点击服务查询

    2、查询结果

    A:输入的查询条件com.itheima.service.UserService

    B:搜索类型,主要分为【按服务名】【按IP地址】【按应用】三种类型查询

    C:搜索结果

    3.1.4 dubo-admin查看详情

    我们查看com.itheima.service.UserService (服务提供者)的具体详细信息,包含【元数据信息】

    1)点击详情

    从【详情】界面查看,主要分为3个区域

    A区域:主要包含服务端 基础信息比如服务名称、应用名称等

    B区域:主要包含了生产者、消费者一些基本信息

    C区域:是元数据信息,注意看上面的图,元数据信息是空的

    我们需要打开我们的生产者配置文件加入下面配置

        
        <dubbo:metadata-report address="zookeeper://192.168.149.135:2181" />
    
    • 1
    • 2

    重新启动生产者,再次打开Dubbo-Admin

    这样我们的元数据信息就出来了

    3.4Dubbo常用高级配置

    3.4.1序列化

    在这里插入图片描述

    • user类 :抽离出来的模块,生产者和消费者都依赖这个模块
    • 将来所有的pojo类(例如user类)都需要实现Serializable接口

    3.4.2地址缓存

    在这里插入图片描述
    服务地址缓存到本地

    3.4.3超时

    在这里插入图片描述在这里插入图片描述
    可以在服务提供方(建议),消费方加注解
    timeout = 3000

    在这里插入代码片package com.itheima.service.impl;
    
    import com.itheima.pojo.User;
    import com.itheima.service.UserService;
    import org.apache.dubbo.config.annotation.Service;
    
    
    //@Service//将该类的对象创建出来,放到Spring的IOC容器中  bean定义
    
    @Service(timeout = 3000)//将这个类提供的方法(服务)对外发布。将访问的地址 ip,端口,路径注册到注册中心中
    public class UserServiceImpl implements UserService {
    
        public String sayHello() {
            return "hello dubbo hello!~";
        }
    
    
        public User findUserById(int id) {
            //查询User对象
            User user = new User(1,"zhangsan","123");
    
            return user;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    3.4.4重试

    在这里插入图片描述

    retries = 3

    package com.itheima.service.impl;
    
    import com.itheima.pojo.User;
    import com.itheima.service.UserService;
    import org.apache.dubbo.config.annotation.Service;
    
    
    //@Service//将该类的对象创建出来,放到Spring的IOC容器中  bean定义
    
    @Service(timeout = 3000,retries = 3)//将这个类提供的方法(服务)对外发布。将访问的地址 ip,端口,路径注册到注册中心中
    public class UserServiceImpl implements UserService {
    
        public String sayHello() {
            return "hello dubbo hello!~";
        }
    
    
        public User findUserById(int id) {
            //查询User对象
            User user = new User(1,"zhangsan","123");
    
            return user;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    3.4.5多版本

    在这里插入图片描述

    • 服务方升级
    • 同一接口的多版本
      在这里插入图片描述
      两个服务方,通过注解改变版本
    @Service(timeout = 3000,retries = 3,version = "v1.0")
    
    • 1
    package com.itheima.service.impl;
    
    import com.itheima.pojo.User;
    import com.itheima.service.UserService;
    import org.apache.dubbo.config.annotation.Service;
    
    
    //@Service//将该类的对象创建出来,放到Spring的IOC容器中  bean定义
    
    @Service(timeout = 3000,retries = 3,version = "v1.0")//将这个类提供的方法(服务)对外发布。将访问的地址 ip,端口,路径注册到注册中心中
    public class UserServiceImpl implements UserService {
    
        public String sayHello() {
            return "hello dubbo hello!~";
        }
    
    
        public User findUserById(int id) {
            //查询User对象
            User user = new User(1,"zhangsan","123");
    
            return user;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    3.4.6负载均衡

    在这里插入图片描述

    @Service(timeout = 3000,retries = 3,version = "v1.0",weight = 100)
    
    • 1
    package com.itheima.service.impl;
    
    import com.itheima.pojo.User;
    import com.itheima.service.UserService;
    import org.apache.dubbo.config.annotation.Service;
    
    
    //@Service//将该类的对象创建出来,放到Spring的IOC容器中  bean定义
    
    @Service(timeout = 3000,retries = 3,version = "v1.0",weight = 100)//将这个类提供的方法(服务)对外发布。将访问的地址 ip,端口,路径注册到注册中心中
    public class UserServiceImpl2 implements UserService {
    
        public String sayHello() {
            return "hello dubbo hello!~";
        }
    
    
        public User findUserById(int id) {
            //查询User对象
            User user = new User(1,"zhangsan","123");
    
            return user;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
     @Reference(loadbalance = "random")//远程注入
        private UserService userService;
    
    • 1
    • 2
    package com.itheima.controller;
    
    import com.itheima.pojo.User;
    import com.itheima.service.UserService;
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        //注入Service
        //@Autowired//本地注入
    
        /*
            1. 从zookeeper注册中心获取userService的访问url
            2. 进行远程调用RPC
            3. 将结果封装为一个代理对象。给变量赋值
    
         */
    
        @Reference(loadbalance = "random")//远程注入
        private UserService userService;
    
    
        @RequestMapping("/sayHello")
        public String sayHello(){
            return userService.sayHello();
        }
    
        /**
         * 根据id查询用户信息
         * @param id
         * @return
         */
    
        @RequestMapping("/find")
        public User find(int id){
            return userService.findUserById(id);
        }
    
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    3.4.7集群容错

    在这里插入图片描述
    服务提供者

        @Reference(loadbalance = "random",cluster ="failover")//远程注入
        private UserService userService;
    
    • 1
    • 2
    package com.itheima.controller;
    
    import com.itheima.pojo.User;
    import com.itheima.service.UserService;
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        //注入Service
        //@Autowired//本地注入
    
        /*
            1. 从zookeeper注册中心获取userService的访问url
            2. 进行远程调用RPC
            3. 将结果封装为一个代理对象。给变量赋值
    
         */
    
        @Reference(loadbalance = "random",cluster ="failover")//远程注入
        private UserService userService;
    
    
        @RequestMapping("/sayHello")
        public String sayHello(){
            return userService.sayHello();
        }
    
        /**
         * 根据id查询用户信息
         * @param id
         * @return
         */
    
        @RequestMapping("/find")
        public User find(int id){
            return userService.findUserById(id);
        }
    
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    3.4.8服务降级

    不太重要的服务关掉

    在这里插入图片描述

        @Reference(loadbalance = "random",cluster ="failover",mock = "force:return null")//远程注入
        private UserService userService;
    
    • 1
    • 2
    package com.itheima.controller;
    
    import com.itheima.pojo.User;
    import com.itheima.service.UserService;
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        //注入Service
        //@Autowired//本地注入
    
        /*
            1. 从zookeeper注册中心获取userService的访问url
            2. 进行远程调用RPC
            3. 将结果封装为一个代理对象。给变量赋值
    
         */
    
        @Reference(loadbalance = "random",cluster ="failover",mock = "force:return null")//远程注入
        private UserService userService;
    
    
        @RequestMapping("/sayHello")
        public String sayHello(){
            return userService.sayHello();
        }
    
        /**
         * 根据id查询用户信息
         * @param id
         * @return
         */
    
        @RequestMapping("/find")
        public User find(int id){
            return userService.findUserById(id);
        }
    
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 相关阅读:
    一文了解 DataLeap 中的 Notebook
    【星海随笔】Ubuntu22.04忘记密码
    国密SM2加解密 for delphi xe 11.1
    linux备份系统盘
    关于 SY8120I 的DC-DC的降压芯片的学习(12V降至3.3V)
    【演讲干货满满】共话数智转型之路:斯歌应邀出席2023德莱维数字技术行业峰会
    Django channel 使用说明 -- 以聊天室为例(2)
    面试--redis基础
    STM32开发利器:STM32CubeMX
    Flink SQL 子图复用逻辑分析
  • 原文地址:https://blog.csdn.net/qq_45498432/article/details/127720729