• SpringBoot 28 服务注册实战


    28.1 spring-boot-provider(提供者)


    本章完全 参照 dubbo-samples-spring-boot 进行学习而记录。

    1. 还是老规矩,创建一个 springboot 项目(这次可能要创建两个,哈哈 ~ 因为 我们 要测试 远程调用嘛。

    在这里插入图片描述

    1. 导入依赖
    
    <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>top.muquanyugroupId>
        <artifactId>springboot-12-dubboartifactId>
        <version>1.0-SNAPSHOTversion>
    
        <properties>
            <maven.compiler.source>8maven.compiler.source>
            <maven.compiler.target>8maven.compiler.target>
        properties>
    
        <dependencies>
            
            <dependency>
                <groupId>org.apache.dubbogroupId>
                <artifactId>dubbo-spring-boot-starterartifactId>
                <version>2.7.3version>
            dependency>
            
            <dependency>
                <groupId>com.github.sgroschupfgroupId>
                <artifactId>zkclientartifactId>
                <version>0.1version>
            dependency>
    
            <dependency>
                <groupId>org.apache.curatorgroupId>
                <artifactId>curator-frameworkartifactId>
                <version>2.12.0version>
            dependency>
            <dependency>
                <groupId>org.apache.curatorgroupId>
                <artifactId>curator-recipesartifactId>
                <version>2.12.0version>
            dependency>
            <dependency>
                <groupId>org.apache.zookeepergroupId>
                <artifactId>zookeeperartifactId>
                <version>3.7.1version>
    
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4jgroupId>
                        <artifactId>slf4j-log4j12artifactId>
                    exclusion>
                exclusions>
            dependency>
        dependencies>
    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
    1. application 的配置
    server.port=8001
    
    # 服务应用名字
    dubbo.application.name=spring-boot-provider
    # 注册中心地址
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    # 哪些服务需要注册
    dubbo.scan.base-packages=top.muquanyu.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 使用 @EnableDubbo 注解,否则 可能 Dubbo 无法生效。

    在这里插入图片描述

    1. 写一个 服务 service 层 然后用 dubbo 的 @Service 去实现暴露 注意哟,不是 Spring 的 Service!!是 dubbo 的。

    在这里插入图片描述

    package top.muquanyu.service;
    
    
    import org.apache.dubbo.config.annotation.Service;
    import org.springframework.stereotype.Component;
    
    @Component
    @Service // 这个注解 就可以 被 扫描到了,项目一起动,就会被自动注册到 zookeeper
    public class TicketServiceImpl implements TicketService{
        @Override
        public String getTicket() {
            return "暴露服务测试";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    在这里插入图片描述


    28.2 spring-boot-consumer(消费者)

    1. application 配置
    server.port=8002
    
    # 服务应用名字
    dubbo.application.name=spring-boot-provider
    # 注册中心地址
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 写一个 跟暴露服务接口 一毛一样的接口,用来 接收 暴露的那个服务

    在这里插入图片描述

    1. 使用 @Reference // 引用的意思 远程引入我们 暴露的接口
    package top.muquanyu.service;
    
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService {
    
        @Reference // 引用的意思
        // Pom 坐标,可以定义路径相同的 接口名
        TicketService ticketServer;
    
        public void test(){
            System.out.println(ticketServer.getTicket());
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    1. 进行 测试

    在这里插入图片描述

    远程调用成功!RPC 成功!


    28.3 小结和细思极恐

    我们 整个 RPC 的过程:首先 需要 一个 注册中心!然后 SpringBoot 整合 Dubbo 暴露 service 接口。再写 一个 引用 接口的 程序。只要 我知道 注册中心的 url 地址。我就可以 拿到 里面的 service!

    思细级恐:想一想,如果 注册中心 是 搭建在 一台 服务器上!那么 我们 是不是 可以 用 这台服务器 做到 其它 计算机/服务器 的 分布式部署呢?因为 我们 可以通过它去 实现 RPC呀 ~ 答案是:肯定的!而且 这种 注册中心的 服务器 甚至 不需要 太高的性能和配置。毕竟 它 就是 一个 传话的。中间件。

  • 相关阅读:
    【Linux学习笔记2】-【Linux目录结构及具体介绍,vi和vim的介绍及快捷方式,】
    GitLab CI/CD使用经验,来自于莫纳什大学的考试任务解析
    又一微信自动化框架wxauto横空出世了!
    【黑马-SpringCloud技术栈】【06】Feign(OpenFeign)
    分库分表真实案例,扩容10倍容量
    74cms 5.0.1 版本命令执行漏洞复现
    中介者模式
    阿里云边缘容器云帮助AI推理应用快速落地
    IP-Guard审批流程设置(一)
    【prometheus上报和使用】
  • 原文地址:https://blog.csdn.net/qq_52606908/article/details/126162093