• 新人一看就懂:Dubbo3 + Nacos的RPC远程调用框架demo


    一、前言

       之前有写过Dubbo2+Zookeeper的RPC远程调用框架demo,因为Dubbo3出来已经一段时间了,加上Zookeeper这玩意很少有人用了,所以结合实下流行的Dubbo3+Nacos搭建一套RPC远程调用框架demo。Nacos也是阿里出的,我前面的文章也有写过,是一个优秀的注册中心和配置中心。

    Feign和Dubbo到底有啥区别,为啥大厂都爱用RPC框架?

       Feign是Spring Cloud的,基于http协议,缺点是不支持高并发。互联网流量大,RPC框架,性能消耗低,传输效率高,服务治理方便,所以大厂都喜欢用RPC框架,尤其是内部服务,当然不一定用Dubbo,大厂都有自研的RPC框架。Dubbo是阿里开源的,阿里自己已经不用了,他们内部还有一套更优秀的RPC框架。

    二、简介

    Dubbo3官网:https://dubbo.apache.org/zh/docs/v3.0/introduction/
    在这里插入图片描述

      Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。

      Dubbo3 基于 Dubbo2 演进而来,在保持原有核心功能特性的同时, Dubbo3 在易用性、超大规模微服务实践、云原生基础设施适配等几大方向上进行了全面升级。

    三、dubbo-api(对外暴漏的接口)

    以下采用的版本:

    • Dubbo:3.0.6
    • Nacos:2.0.3

    1、TestService接口

    public interface TestService {
        /**
         * 获取名称
         *
         * @param id
         * @return
         */
        String getName(Integer id);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    四、dubbo-provider(服务提供者)

    1、pom依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-registry-nacosartifactId>
        dependency>
        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-spring-boot-starterartifactId>
        dependency>
        <dependency>
            <groupId>com.alibaba.nacosgroupId>
            <artifactId>nacos-clientartifactId>
        dependency>
    
        
        <dependency>
            <groupId>com.dubbogroupId>
            <artifactId>dubbo-apiartifactId>
        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

    2、TestServiceImpl实现类

    @DubboService
    public class TestServiceImpl implements TestService {
        @Override
        public String getName(Integer id) {
            // 模拟查询数据库操作,返回了"张三";
            return "张三";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、application.yml

    server:
      port: 8001
    
    spring:
      application:
        name: dubbo-provider
    
    dubbo:
      # 注册中心地址
      registry:
        address: nacos://192.168.60.123:8848
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4、DubboProviderApplication启动类

    @SpringBootApplication
    @EnableDubbo
    public class DubboProviderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DubboProviderApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    五、dubbo-consumer(服务消费者)

    1、pom依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-registry-nacosartifactId>
        dependency>
        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-spring-boot-starterartifactId>
        dependency>
        <dependency>
            <groupId>com.alibaba.nacosgroupId>
            <artifactId>nacos-clientartifactId>
        dependency>
    
        
        <dependency>
            <groupId>com.dubbogroupId>
            <artifactId>dubbo-apiartifactId>
        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

    2、TestController

    @RestController
    public class TestController {
        @DubboReference
        private TestService testService;
    
        @GetMapping("/test")
        public String test(Integer id) {
            return testService.getName(id);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3、application.yml

    server:
      port: 8002
    
    spring:
      application:
        name: dubbo-consumer
    
    dubbo:
      # 注册中心地址
      registry:
        address: nacos://192.168.60.123:8848
        register: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    注意1:端口号-1,可以让它自己递增。
    注意2:有人遇到,消费者服务启动不起来!因为dubbo的客户端在启动的时候,默认检查是否有可用的远程服务。这边可以加上这个:

    consumer:
        # 取消服务启动检查
        check: false
    
    • 1
    • 2
    • 3

    4、DubboConsumerApplication

    @SpringBootApplication
    @EnableDubbo
    public class DubboConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DubboConsumerApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5、服务启动

    在这里插入图片描述

    Nacos管理控制台
    可以看到服务注册上来了,Dubbo 3支持多种注册模式,相比于 2.x 版本中的基于接口粒度的服务发现机制,3.x 引入了全新的基于应用粒度的服务发现机制。(默认接口和应用都注册)
    在这里插入图片描述

    浏览器访问http://localhost:8002/test
    在这里插入图片描述

    到这里服务算是通了!

    ✅ 源码github下载地址:点这里,如果没有github,留下邮箱,会发你。

    ✅Dubbo 3 新增了不少核心特性,可以试试。(https://dubbo.apache.org/zh/docs/v3.0/new-in-dubbo3/
    在这里插入图片描述

  • 相关阅读:
    正则表达式
    集合类不安全
    Flutter基础学习(一)Dart语言入门
    计算机视觉与深度学习-卷积神经网络-纹理表示&卷积神经网络-纹理表示-[北邮鲁鹏]
    在 Kubernetes 环境中实现证书管理的自动化
    Java笔记(九)
    瑞吉外卖 —— 6、套餐管理
    Nginx内存池:外部资源释放和内存池销毁
    sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务。
    【Java 进阶篇】JQuery 遍历 —— 无尽可能性的 `each` 之旅
  • 原文地址:https://blog.csdn.net/sinat_27933301/article/details/127823016