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

2023-05-16

文章目录

    • 一、前言
      • Feign和Dubbo到底有啥区别,为啥大厂都爱用RPC框架?
    • 二、简介
    • 三、dubbo-api(对外暴漏的接口)
      • 1、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、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>org.apache.dubbo</groupId>
        <artifactId>dubbo-registry-nacos</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</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

4、DubboProviderApplication启动类

@SpringBootApplication
@EnableDubbo
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>org.apache.dubbo</groupId>
        <artifactId>dubbo-registry-nacos</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Nacos快速入门(一):Nacos初探

    1 简介 Nacos官网 https nacos io zh cn index html 1 1 概览 Nacos 致力于帮助您发现 配置和管理微服务 Nacos 提供了一组简单易用的特性集 帮助您快速实现动态服务发现 服务配置 服务元数据
  • SpringBoot整合ELK教程

    SpringBoot整合ELK教程 1 基础概念 ELK 即 Elasticsearch Logstash Kibana 组合起来可以搭建线上日志系统 本文主要讲解使用 ELK 来收集测试框架产生的日志 Elasticsearch 用于存储
  • AVRO 中的数据验证

    我是 AVRO 新手 如果这是一个简单的问题 请原谅 我有一个使用 AVRO 模式进行记录调用的用例 假设我有 avro 架构 name abc namepsace xyz type record fields name CustId ty
  • 套接字异常:“端点映射器没有更多可用端点”

    我正在使用winsock 和C 来设置服务器应用程序 我遇到的问题是调用listen导致第一次机会异常 我想通常这些可以被忽略 但我发现其他人也有同样的问题 它导致应用程序偶尔挂起 任何帮助将不胜感激 第一个机会例外是 0x 1234567
  • RPC有超时机制吗?

    如果 RPC 没有超时机制 当 RPC 调用尝试调用已关闭的服务器的 RPC 方法时 如何 杀死 它 您可以使用channels实现超时模式 import time c make chan error 1 go func c lt clie
  • gRPC 设置出现问题。出现间歇性 RPC 不可用错误

    我有一个 grpc 服务器和客户端 大部分时间都按预期工作 但偶尔会收到 传输正在关闭 错误 rpc error code Unavailable desc transport is closing 我想知道是不是我的设置有问题 客户端非常
  • Wordpress XML-RPC 和特色图像

    我目前正在为客户端开发一个插件 该插件每小时获取一个 xml feed 并将其发布到 wordpress 中 但我在将特色图像发送到帖子时遇到问题 我可以很好地发布到 WordPress 但我发布特色图像的所有尝试都失败了
  • requirejs Angular 似乎没有注册控制器/服务/等

    我有一个非常简单的 requirejs 和 Angular 演示应用程序 当我运行代码时 就好像 Angular 没有注册 homeController 即使文件确实运行并输出 来自家庭控制器的 Hello 令人沮丧的是几乎没有关于如何解决
  • k8s集群内部署nacos集群

    一 前言 在k8s集群中部署nacos集群需要用到以下服务setafulset pv pvc service configmap setafulset用来管理nacos服务 因为nacos服务是有状态服务 所以需要使用setafulset
  • Python远程过程调用(不带远程部分)

    我有一个不以 root 身份运行的 Python 服务器 它面向我正在开发的应用程序 然而 有一些应用程序功能需要访问 RAW 套接字 这意味着 root 权限 显然 我不想以 root 身份运行主服务器 因此我的解决方案是创建一个守护进程
  • GWT 和 XSRF 保护

    我正在寻找可能的解决方案来保护我的 GWT 应用程序免受 XSRF 的影响 如果我明白的话GWT的解决方案 http code google com webtoolkit doc latest DevGuideSecurityRpcXsrf
  • 如何将数据从 gRPC 拦截器传递到服务方法调用?

    我需要传递一些数据ServerAuthIntereptor打电话 服务器验证拦截器 used in context parameters map private static final String AUTH CONTEXT authCo
  • Invoke-Command 和直接查询的区别

    我目前正在编写一个从服务器查询磁盘信息的脚本 我遇到了一个问题 我真的不知道这里发生了什么 愿你能帮助我 以下代码有效 已替换 ComputerName space1 Invoke Command ComputerName xxxxxx S
  • 通过管道传输的 Thrift IPC (Windows)

    我一直在关注 Thrift 对 Windows 的支持 并且由于许多贡献者的努力 VS 开发已经取得了长足的进步 有针对编译器和 C 库的 VS 2010 项目 我已经确认它们在 0 8 中运行良好 http thrift apache o
  • 如何在 Java 中对 Hive 进行异步调用?

    我想以异步方式在服务器上执行 Hive 查询 Hive 查询可能需要很长时间才能完成 因此我不想阻止调用 我目前正在使用 Thirft 进行阻塞调用 在 client execute 上阻塞 但我还没有看到如何进行非阻塞调用的示例 这是阻止
  • Hedera 上几乎相同的交易中“gasUsed”值存在巨大差异 - 为什么?

    我注意到所使用的气体量之间存在差异 通过交易几乎是相同的 我正在调用智能合约 连续两次使用相同的参数 两者之间的唯一区别 是我正在设置gasLimit到精确值 由返回eth estimateGas在第一个中 我正在设置gasLimit to
  • 从 Node.JS 调用 Haskell

    我想从 Node js 对 Haskell 代码进行 RPC 调用 Node 和 Haskell 都有哪些库 我只能找到 XML RPC 和 Zeromq 但它们似乎不稳定 对于 Haskell 端的 xml rpc haxr 库已经存在很
  • LRPC 的意义何在?为什么有人想要对同一台机器进行远程过程调用?

    根据我对 RPC 远程过程调用 的理解 它们提供了一种向远程计算机发送函数调用 调用等的方法 这样做的明显优点是 您可以拥有一个在机器集群上运行的单个程序 并且可以处理更多请求 更多数据等 但我很困惑LRPC 轻量级RPC http www
  • 微服务之间的通信

    假设您有微服务 A B 和 C 它们当前都通过 HTTP 进行通信 假设服务 A 向服务 B 发送请求 服务 B 得到响应 然后 该响应中返回的数据必须发送到服务 C 进行一些处理 然后最终返回到服务 A 服务 A 现在可以在网页上显示结果
  • java.lang.ClassNotFoundException:com.google.gwt.user.client.rpc.RemoteService

    在 Tomcat 6 中部署 war 文件时出现以下异常 java lang ClassNotFoundException com google gwt user client rpc RemoteService 所以我尝试通过 webAp

随机推荐

  • git submodule 升级commit并push

    git submodule 升级commit并push 关于这个问题 xff0c 可以参照以下文章 xff1a https blog csdn net wwj 748 article details 73991862 流程写的很清楚 xff
  • 欧拉角pitch、yaw,roll的理解

    关于旋转永远是做游戏的难点和混乱点 我们知道表示一个旋转有多种方式 xff0c 简单的欧拉角 xff0c 复杂点的四元数 xff0c 再复杂点的矩阵 之前接触unity可以用四元数和欧拉角两种方式表示旋转 xff0c 最近一直研究虚幻引擎
  • Mac执行ruby命令提示 dyld: Library not loaded等类似问题解决方案

    说一下为啥会遇见这么个问题 xff0c 我在给一个xcode项目添加podfile的时候 xff0c 在终端执行了pod init命令 xff0c 随即给了我一个如下图的提示 xff08 报错信息一样的 xff0c 执行pod的命令早就被解
  • 编程题:多线程交替打印ABC

    要求创建3个线程 xff0c 分别打印ABC xff0c 共交替打印10次 span class token keyword public span span class token keyword class span span clas
  • Android App Bundle 自动打包原理

    Google推出Android App Bundle 已经有一段时间了 根据Google的政策说明 xff0c 预计2021年8月之后 xff0c 新发布的应用都必须使用Android App Bundle aab 来上架Google Pl
  • 【玩转Linux】Linux虚拟机设置固定IP

    Linux虚拟机Centos系统的ip总是变化 xff0c 如何固定下来 xff1f 尝试了好多方式 xff0c 终于找到一种最为简单的方法 文章目录 1 查看Centos的IP信息2 修改文件3 刷新网络配置 1 查看Centos的IP信
  • Docker安装MySQL数据库

    文章目录 一 简单方式二 挂载方式1 创建挂载目录2 启动容器 三 修改配置文件1 新建my cnf2 编辑my cnf3 查看是否生效 一 简单方式 span class token function docker span run sp
  • 解决Docker镜像拉取失败问题

    一 问题 Docker拉取mysql镜像 xff0c 发生报错 span class token function docker span pull mysql 8 0 22 报错信息 xff1a Error response from d
  • Docker安装RabbitMQ消息队列

    文章目录 1 启动容器2 连接访问 1 启动容器 span class token function docker span run name rabbitmq span class token punctuation span resta
  • 【玩转Linux】Linux安装宝塔面板

    文章目录 一 简介二 安装1 centos脚本安装2 浏览器访问 三 总结 一 简介 宝塔面板 xff0c 是安全高效的服务器运维面板 xff0c 一个提升运维效率的服务器管理软件 xff0c 支持一键LAMP LNMP 集群 监控 网站
  • 使用JDK的keytool工具生成JKS证书

    使用JDK的keytool工具生成JKS证书 文章目录 1 生成JKS证书2 查看JKS证书详细信息3 导出证书 1 生成JKS证书 keytool genkey alias jwt keyalg RSA keystore jwt jks
  • 【算法】二分查找

    算法 二分查找 题目 xff1a 请实现无重复数字的升序数组的二分查找 难度 xff1a 简单 代码 xff1a 二分查找 xff0c 又叫折半查找 xff0c 要求待查找的序列有序 每次取中间位置的值与待查关键字比较 xff0c 如果中间
  • 【算法】反转链表

    算法 反转链表 题目 xff1a 给定一个单链表的头结点pHead xff0c 长度为n xff0c 反转该链表后 xff0c 返回新链表的表头 难度 xff1a 简单 代码 xff1a span class token keyword c
  • 【算法】合并两个排序的链表

    算法 合并两个排序的链表 题目 xff1a 输入两个递增的链表 xff0c 单个链表的长度为n xff0c 合并这两个链表并使新链表中的节点仍然是递增排序的 难度 xff1a 简单 代码 xff1a span class token key
  • 【算法】判断链表中是否有环

    算法 判断链表中是否有环 题目 xff1a 判断给定的链表中是否有环 如果有环则返回true xff0c 否则返回false 难度 xff1a 简单 代码 xff1a span class token keyword public span
  • 教你快速高效接入SDK——手游聚合SDK的总体思路和架构

    U8SDK技术博客 xff1a http www uustory com xff0c 欢迎来坐坐 百度传课已经停运 xff0c 最新U8SDK视频教程已经转移至B站 xff1a U8SDK最新视频教程 题记 xff1a 很多做游戏开发的人
  • 【算法】删除链表的倒数第N个结点

    算法 删除链表的倒数第N个结点 题目 xff1a 给你一个链表 xff0c 删除链表的倒数第 n 个结点 xff0c 并且返回链表的头结点 难度 xff1a 中等 代码 xff1a span class token keyword publ
  • 阿里云智能编码插件Cosy,提升开发效率杠杠滴!

    文章目录 一 简介二 核心功能1 代码智能补全2 代码示例搜索 三 产品特性1 提升编码效率2 沉浸式开发3 低资源消耗4 隐私保护 四 快速开始1 安装IntelliJ IDEA插件2 测试代码智能补全3 测试代码示例搜索 五 总结 一
  • Alibaba Cloud Toolkit轻量部署插件,一键发布服务器

    文章目录 一 简介二 部署方式1 传统部署方式2 Cloud Toolkit部署方式 四 产品功能五 部署步骤1 安装插件2 添加主机3 Deploy to Host4 控制台5 服务器 六 服务器代码热部署七 Arthas诊断 一 简介
  • 新人一看就懂:Dubbo3 + Nacos的RPC远程调用框架demo

    文章目录 一 前言Feign和Dubbo到底有啥区别 xff0c 为啥大厂都爱用RPC框架 xff1f 二 简介三 dubbo api xff08 对外暴漏的接口 xff09 1 TestService接口 四 dubbo provider