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

news2025/7/5 9:19:51

文章目录

    • 一、前言
      • Feign和Dubbo到底有啥区别,为啥大厂都爱用RPC框架?
    • 二、简介
    • 三、dubbo-api(对外暴漏的接口)
      • 1、pom依赖
      • 2、TestService接口
    • 四、dubbo-provider(服务提供者)
      • 1、pom依赖
      • 2、TestServiceImpl实现类
      • 3、application.yml
      • 4、DubboProviderApplication启动类
    • 五、dubbo-consumer(服务消费者)
      • 1、pom依赖
      • 2、TestController
      • 3、application.yml
      • 4、DubboConsumerApplication
      • 5、服务启动

一、前言

   之前有写过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、pom依赖

<!--Dubbo依赖-->
<dependencies>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-registry-nacos</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
    </dependency>
</dependencies>

2、TestService接口

public interface TestService {
    /**
     * 获取名称
     *
     * @param id
     * @return
     */
    String getName(Integer id);
}

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

1、pom依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
    </dependency>

    <!--依赖-->
    <dependency>
        <groupId>com.dubbo</groupId>
        <artifactId>dubbo-api</artifactId>
    </dependency>
</dependencies>

2、TestServiceImpl实现类

@DubboService
public class TestServiceImpl implements TestService {
    @Override
    public String getName(Integer id) {
        // 模拟查询数据库操作,返回了"张三";
        return "张三";
    }
}

3、application.yml

server:
  port: 8001

spring:
  application:
    name: dubbo-provider

dubbo:
  # 注册中心地址
  registry:
    address: nacos://192.168.60.123:8848
  protocol:
    name: dubbo
    port: 20880

4、DubboProviderApplication启动类

@SpringBootApplication
@EnableDubbo(scanBasePackages = "com.dubbo.provider.service")
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }
}

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

1、pom依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
    </dependency>

    <!--依赖-->
    <dependency>
        <groupId>com.dubbo</groupId>
        <artifactId>dubbo-api</artifactId>
    </dependency>
</dependencies>

2、TestController

@RestController
public class TestController {
    @DubboReference
    private TestService testService;

    @GetMapping("/test")
    public String test(Integer id) {
        return testService.getName(id);
    }
}

3、application.yml

server:
  port: 8002

spring:
  application:
    name: dubbo-consumer

dubbo:
  # 注册中心地址
  registry:
    address: nacos://192.168.60.123:8848?register=false
  protocol:
    name: dubbo
    port: -1

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

consumer:
    # 取消服务启动检查
    check: false

4、DubboConsumerApplication

@SpringBootApplication
@EnableDubbo
public class DubboConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class, args);
    }
}

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/)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIP-Datacom OSPF进阶(一) 最常用的动态路由协议

目录 OSPF&#xff1a;开放式最短路径优先 OSPF配置方法&#xff1a; OSPF报文头部&#xff1a; OSPF报文类型&#xff1a; OSPF状态机&#xff1a; DR与BDR的作用&#xff1a; 设置选举DR时的优先级&#xff1a; OSPF的网络类型&#xff1a; 修改OSPF接口网络类型命令…

java毕业设计教学平台(附源码、数据库)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

Java实现五子棋小游戏(附源码)

Java进阶学习专栏&#xff1a;【Java】进阶篇 Java基础学习专栏&#xff1a;【Java】基础篇 文章目录一、游戏介绍二、效果展示三、代码展示1、登录页面2、算法程序3、棋盘实现四、资源下载五、文末总结一、游戏介绍 今天给大家分享一个用java写的小游戏——《五子棋》 &#…

计算机毕业设计SSM电影网站系统【附源码数据库】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【编程题】【Scratch三级】2021.12 数星星

数星星 Goblin有个很厉害的魔法:他一挥手就可以点亮夜空中五彩斑斓的星星灯。 1. 准备工作 (1)删除小猫角色,添加"Goblin"角色,并删除Goblin角色的造型"golblin-a"、“goblin-c"和"goblin-d”,添加角色"Star"; (2)添加“Sta…

Matlab之自适应位移相位中心天线脉冲消除器(附源码)

目录 一、何时使用自适应DPCA脉冲消除器 二、自适应DPCA脉冲消除器可抑制杂波和干扰 三、程序 一、何时使用自适应DPCA脉冲消除器 考虑需要抑制杂波的机载雷达系统 返回并可能干扰干扰。根据以下任何一项 条件下&#xff0c;可以选择自适应 DPCA &#xff08;ADPCA&#xf…

数据挖掘与分析应用:tableau可视化数据分析,仪表盘,折线图,饼图,条形图,地图,散点图,区域图,表格,数据分析引用

数据挖掘与分析应用&#xff1a;tableau可视化数据分析&#xff0c;仪表盘&#xff0c;折线图&#xff0c;饼图&#xff0c;条形图&#xff0c;地图&#xff0c;散点图&#xff0c;区域图&#xff0c;表格&#xff0c;数据分析引用 2022找工作是学历、能力和运气的超强结合体&…

Java集合

一、集合概述 1、数组的特点 数组的大小是固定的&#xff0c;一旦创建后&#xff0c;数组的大小是无法改变的。数组只能存储相同类型的数据。数组查询效率高(有索引&#xff0c;元素内存连续分配)&#xff0c;增删效率低(不断的扩容)。 2、数组和集合的区别 相同点&#xff1…

【Designing ML Systems】第 6 章 :模型开发和离线评估

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

目标检测论文解读复现之三:基于改进YOLOv7的X光图像旋转目标检测

目标检测论文解读复现 文章目录目标检测论文解读复现前言一、摘要二、网络模型及核心创新点三、应用数据集四、实验效果五、实验结论六、投稿期刊介绍前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果…

json字符串、JSNObject、JSONArray、jsonbean、list等相关的转换、过滤工具方法测试

一、准备工作 引入pom <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version> </dependency><dependency><groupId>org.projectlombok</groupId><art…

云计算 - 4 - Spark的安装与应用

云计算 - 4 - Spark的安装与应用目标Spark 的安装&#xff1a;1、下载配置 Scala1.1 下载 Scala1.2 配置 Scala 的路径1.3 测试 Scala 是否安装完成2、下载配置Spark2.1 下载Spark2.2 配置 Spark 的路径2.3 修改 Spark 的配置文件3、将文件复制到子节点4、启动Spark5、测试Spar…

nginx模块

目录 搭建域名虚拟主机 nginx索引 状态索引 访问控制 基于ip限制 基于用户限制 配置nginx官方yum源 http://nginx.org/en/linux_packages.html#RHEL-CentOS vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/cent…

Linux调试工具:gdb的使用

文章目录一、gdb简介二、gdb基础命令操作1.进入gdb &#xff1a;gdb 文件名2.显示代码&#xff1a;l3.开始调试&#xff1a;r4.打断点&#xff1a;b 行号5.显示断点信息&#xff1a;info b6.删断点&#xff1a;d 编号7.逐过程&#xff1a;n8.逐语句&#xff1a;s9.进入堆栈&…

JavaScript基础

目录 数据类型 基本数据类型 引用数据类型 变量 运算符 算数运算符 赋值运算符 字符串连接符 关系运算符 逻辑运算符 三目运算符 分支语句 循环语句 流程控制语句 错误处理 函数 数组 对象 内置对象 String RegExp Math Date 全局函数 简介&#xff1a; 是…

Nginx虚拟主机与域名解析

文章目录一、域名、dns、ip地址之间的关系二、浏览器、nginx与http协议三、虚拟主机原理四、域名解析与泛解析1.公网ip解析2.内网ip解析五、域名解析相关企业项目实战技术架构1.多用户二级域名2.短网址3.httpDNS一、域名、dns、ip地址之间的关系 域名代表了一个公司、一个人或…

C语言之文件的使用(下)

目录 前言 一、文件的随机读写 1.如何进行随机读写 2.相关函数&#xff08;含例子&#xff09; 1.fseek函数 2.ftell函数 3.rewind函数 二、文件读取结束的判定 1.判定结束的相关函数 1.feof函数 2.ferror函数 2.不同类型文件 1.文本文件和二进制文件 2.不同文件的所判断的返回…

win10怎么安装iis

在win10系统桌面&#xff0c;点击开始菜单里的设置图标。 win10怎么安装iis 在Windows设置界面&#xff0c; 点击应用。 win10怎么安装iis 在应用界面&#xff0c;点击【程序和功能】。 win10怎么安装iis 在程序管理界面&#xff0c;点击启用或关闭Windows功能。 win10怎…

Python采集剧本杀店家数据信息,做可视化演示

前言 哈喽啊&#xff0c;友友们 有喜欢玩桌游或者剧本杀的吗 其实我自己对这个不太感兴趣哈哈&#xff0c;但是也玩过 正好又有朋友约着出去&#xff0c;就是不知道哪家店更值得去 所以趁着还有几天就用python来采集一些 店家的数据信息 并做个可视化演示吧 环境使用: P…

如何利用Dpabi,AFNI,FSL软件计算种子点的功能连接?

种子点功能连接方法基本概念和实现 种子点的功能连接基本概念功能连接在数据处理里的具体应用如何使用 Dpabi, AFNI 和 FSL 计算种子点功能连接呢?选择种子点利用DPABI软件进行种子点的功能连接利用AFNI (3dNetCorr)进行种子点的功能连接利用FSL (fslmeants + fsl_glm)进行…