微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用

🏷️个人主页:鼠鼠我捏,要死了捏的主页 

🏷️系列专栏:Golang全栈-专栏

🏷️个人学习笔记,若有缺误,欢迎评论区指正 

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站AI学习网站。

目录

前言

快速上手

创建示例项目

导入依赖

编写配置

添加启动类注解

编写服务接口与服务实现类

引入common项目

新建common项目

总结


前言

随着互联网技术的飞速发展,越来越多的企业和开发者开始关注微服务架构。微服务架构可以将一个大型的应用拆分成多个独立、可扩展、可维护的小型服务,每个服务负责实现应用的一部分功能。这种架构方式可以提高开发效率,降低系统复杂度,方便团队协作,同时也有利于资源的合理利用和弹性伸缩。

在微服务架构中,服务之间的通信是一个关键问题。传统的HTTP通信方式在高并发、高性能的场景下存在性能瓶颈,因此,越来越多的开发者开始采用RPC(远程过程调用)技术来实现服务之间的通信。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了丰富的服务治理功能,如服务注册、服务发现、负载均衡、容错等,被广泛应用于微服务架构中。

Nacos是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台,它支持基于DNS和基于RPC的服务发现,具有跨语言、跨平台、灵活扩展的特点。网上很多都是Springcloud整合Dubbo,本文讲解如何将Spring Boot与Dubbo和Nacos整合,实现RPC调用。

快速上手

在实现DubboRPC服务调用时,我们首先需要一个服务注册中心,常用的服务注册中心有Zookeeper,Nacos等,我们这里采用Nacos,没有部署Nacos的请先自行教程部署,这里不细讲

创建示例项目

我们这里创建两个名为ProviderDemo和ConsumerDemo的项目

导入依赖

整合nacos和dubbo主要需要nacos-client和dubbo这两项依赖

        <!--这里对应的Springboot版本为2.7.6--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.0.9</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.1.0</version></dependency>

ProviderDemo的maven配置信息如下

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.luckysj</groupId><artifactId>ProviderDemo</artifactId><version>0.0.1-SNAPSHOT</version><name>ProviderDemo</name><description>ProviderDemo</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.7.6</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.0.9</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.1.0</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>

ConsumerDemo的配置信息如下

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.luckysj</groupId><artifactId>ConsumerDemo</artifactId><version>0.0.1-SNAPSHOT</version><name>ConsumerDemo</name><description>ConsumerDemo</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.7.6</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.0.9</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.1.0</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>

编写配置

consumerDemo项目的配置如下,注意把nacos信息更改为自己的

server:port: 7777dubbo:application:#设置应用的名称name: dubbo-springboot-consumer#qos监控服务是否启动qos-enable: true#qos监控服务端口qos-port: 23456qos-accept-foreign-ip: false#指定使用Dubbo协议,且端口设置为-1,表示随机分配可用端口protocol:name: dubboport: -1registry:#配置注册中心为Nacosid: nacos-registryaddress: nacos://nacos服务的ip:nacos服务的端口username: nacos账户password: nacos密码parameters:namespace: f74484c1-02d8-4322-a50c-630bc814fe54   #nacos命名空间group: dubbo-demo    #nacos分组config-center:timeout: 40000 #设置服务超时时间

 providerDemo项目的配置如下

server:port: 6666
dubbo:application:#设置应用的名称name: dubbo-springboot-providerqos-enable: trueqos-port: 23444qos-accept-foreign-ip: false#指定使用Dubbo协议,且端口设置为-1,表示随机分配可用端口protocol:name: dubboport: -1registry:#配置注册中心为Nacosid: nacos-registryaddress: nacos://ip:端口username: 账户password: 密码parameters:namespace: f74484c1-02d8-4322-a50c-630bc814fe54   #nacos命名空间group: dubbo-demo    #nacos分组config-center:timeout: 40000 #设置服务超时时间

添加启动类注解

我们要使用Dubbo服务的话需要在服务启动类上编写@EnableDubbo注解(提供者项目和消费者项目都需要)

编写服务接口与服务实现类

我们在Provider项目中provider包下新建服务接口与实现类

PrintService接口内容如下

public interface PrintService {public void print(String str);
}

PrintServiceImpl接口内容如下,我们通过@DubboService注解暴露该服务,

@DubboService
public class PrintServiceImpl implements PrintService {@Overridepublic void print(String str) {System.out.println("dubbo调用打印信息为" + str);}
}

 在服务消费方项目中也定义相同的接口

public interface PrintService {public void print(String str);
}

特别注意这里调用者与提供者的服务接口需要有相同的包路径,否则无法找到对应服务,我们后续通过引入一个common项目来解决这个问题

在服务消费方项目编写一个测试接口,使用@DubboReference注解声明引用的服务

@RestController
@RequestMapping("/demo")
public class DemoController {@DubboReference //声明服务引用private PrintService printService;@GetMapping("/test")public void testDubbo(String str){System.out.println("consumer开始RPC调用provider服务");printService.print(str);}
}

访问接口,测试两项目之间的服务调用,可以看到我们ConsumerDemo项目通过Dubbo成功的调用了ProviderDemo项目

http://localhost:7777/demo/test?str=111

 

引入common项目

我们上面可以发现提供者和消费者的服务接口必须在相同的包路径下,十分的不优雅,故我们可以新建一个common项目,在这个项目中定义双方服务调用的接口,相当于定义了一种规范,两边都采用common中的服务接口,这样就不会因为包路径不同导致dubbo找不到对应服务

新建common项目

打包该项目到本地(云)仓库中,在消费者和提供者项目中引入该项目

双方都使用common包内的服务接口

测试接口,运行正常,结束

总结

Dubbo是一个基于Java的RPC (远程过程调用)框架,比OpenFeign支持更多的通讯协议,且性能更高,更加适应于大规模的分布式项目中。

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

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

相关文章

猫头虎博客分享:深入解析 Visual Studio Code 1.86 版本新特性

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

测试文章笔记-SQL3种优化方法

SQL语句优化&#xff1a; 本质&#xff1a;降低执行时间 **核心思路&#xff1a;**找到执行计划中开销较高的操作&#xff0c;改写SQL语句或改变表访问方式调整执行计划。 举例&#xff1a; 1.使用索引替代全表扫描&#xff08;索引&#xff1a;是帮助MysQL高效获取数据的数…

【JVM】打破双亲委派机制

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;JVM ⛺️稳中求进&#xff0c;晒太阳 打破双亲委派机制 打破双亲委派机制三种方法 自定义类加载器 ClassLoader包含了四个核心方法 //由类加载器子类实现&#xff0c;获取二进制数据调用…

MySQL之json数据操作

1 MySQL之JSON数据 总所周知&#xff0c;mysql5.7以上提供了一种新的字段格式json&#xff0c;大概是mysql想把非关系型和关系型数据库一口通吃&#xff0c;所以推出了这种非常好用的格式&#xff0c;这样&#xff0c;我们的很多基于mongoDB的业务都可以用mysql去实现了。当然…

NumPy模块完结篇:深入探讨和高效利用【第85篇—NumPy模块】

NumPy模块完结篇&#xff1a;深入探讨和高效利用 NumPy是Python中用于科学计算的核心库之一&#xff0c;提供了高性能的多维数组对象&#xff08;numpy.ndarray&#xff09;以及许多用于操作这些数组的函数。在前面的几篇博客中&#xff0c;我们介绍了NumPy的基础知识、数组操…

电子商务跨境电商大数据的关键技术之—主流电商大数据采集

大数据采集是指通过各种技术手段和工具收集、获取和提取大规模数据的过程。在信息时代&#xff0c;各种互联网、物联网、移动设备等的普及和应用&#xff0c;产生了海量的数据&#xff0c;这些数据被称为大数据。大数据采集就是对这些数据进行收集和抓取&#xff0c;以获得有意…

手把手一起开发SV4E-I3C设备(二)

JEDEC DDR5 SPD Hub Devices例程 DDR5生态系统的核心是SidebandBus Protocol 参考下图&#xff0c;可以将SV4E-I3C的端口1声明为主服务器(模拟主机控制器)&#xff0c;并且它可以属于SV4E-I3C上的一个总线。端口2可以作为SPD Hub DUT的Local Bus侧的从站连接。这个从站可以被…

12(S)-HETE ELISA kit--灵敏的ELISA试剂盒

灵敏的ELISA试剂盒&#xff0c;能够检测任何物种的培养上清液和血浆中的12(S)-HETE HETE是由脂氧合酶代谢花生四烯酸产生的副产物。12(S)-HETE是12(S)-氢过氧四烯酸&#xff08;12(S)-HpETE&#xff09;还原的立体特异性羟基产物&#xff0c;其本身是花生四烯酸的12-脂氧酶代谢…

23年秋招结束,同学们陆陆续续拿到心仪的offer!24年秋招出发!

续接上次上岸同学的分享&#xff1a;还在担心秋招吗&#xff1f;看看24届已上岸同学的经验分享&#xff01; 秋招的时间过程相同&#xff0c;但经历却各不相同。学历、专业似乎都影响着同学们的面试经历和感受。校招的面试毫无疑问学历的加持是巨大的优势&#xff0c;学历好会…

票房25亿!《热辣滚烫》的创造性模仿,普通人赚钱的落地方法

最近很火的电影《热辣滚烫》包含了我们很多普通人做点小事儿&#xff0c;赚点小钱非常落地的方法&#xff0c;叫做创造性模仿。 很多人说《热辣滚烫》是翻拍的日本《百元之恋》&#xff0c;知道这个有什么用&#xff1f;就证明贾玲不是那么优秀吗&#xff1f;对我们普通人想赚…

全新超大屏三防加固平板为什么做到Intel core i7的高性能

在小编看来&#xff0c;一款加固三防平板电脑结构规划的思路&#xff1a;一定是要在三防规划中留意取舍的。如果是三防要求高的的商品&#xff0c;则需要将三防规划作为一个主线来做&#xff0c;其他方面环绕三防要求打开&#xff0c;并要有清晰的三防思路和总体思想&#xff0…

java面试微服务篇

目录 目录 SpringCloud Spring Cloud 的5大组件 服务注册 Eureka Nacos Eureka和Nacos的对比 负载均衡 负载均衡流程 Ribbon负载均衡策略 自定义负载均衡策略 熔断、降级 服务雪崩 服务降级 服务熔断 服务监控 为什么需要监控 服务监控的组件 skywalking 业务…

【c++】const引用

Hello everybody!今天给大家讲讲有关const引用部分的知识&#xff0c;因为这部分知识涉及到const与引用直接如何灵活的运用&#xff0c;且不太好理解。所以我认为讲一下这里的知识还是很有必要的&#xff01; 1.权限可缩小 首先&#xff0c;当我们定义了a&#xff0c;在给a取别…

人工智能学习与实训笔记(二):神经网络之图像分类问题

人工智能专栏文章汇总&#xff1a;人工智能学习专栏文章汇总-CSDN博客 目录 二、图像分类问题 2.1 尝试使用全连接神经网络 2.2 引入卷积神经网络 2.3 分类函数Softmax 2.4 交叉熵损失函数 2.5 学习率优化算法 2.6 图像预处理算法 2.6.1 随机改变亮暗、对比度和颜色等 …

这才是大学生该做的副业,别再痴迷于游戏了!

感谢大家一直以来的支持和关注&#xff0c;尤其是在我的上一个公众号被关闭后&#xff0c;仍然选择跟随我的老粉丝们&#xff0c;你们的支持是我继续前行的动力。为了回馈大家长期以来的陪伴&#xff0c;我决定分享一些实用的干货&#xff0c;这些都是我亲身实践并且取得成功的…

Typora的下载安装(文末有安装包,2024亲测可用)

一、安装步骤 1、首先下载安装包&#xff0c;解压到你的目录下面 2、进入到解压后的文件夹下面&#xff0c;看到如下的内容&#xff1a; 3、双击exe文件开始安装&#xff0c;选择安装目录&#xff0c;并记下安装地址&#xff01;&#xff01;&#xff01; 选择创建桌面快捷方…

2024年腾讯云4核8G12M轻量应用服务器测评,2月更新

4核8G服务器支持多少人同时在线访问&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&…

树和二叉树的基本知识

一、树的概念及结构 1.树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 有一个 特殊…

2024春节过后,抖店爆款出单类目产品,应季产品需要提前布局

我是王路飞。 之前给你们强调过&#xff0c;“应季品”是最容易爆单的产品类型&#xff0c;没有之一。 那么在2024年春节刚过的现在&#xff0c;当别人还沉浸在过年的氛围中时&#xff0c;有心的商家早就开始布局未来三个月的爆款类目和产品了。 今天的内容&#xff0c;就给…

软件实例分享,乒乓球俱乐部会员系统管理软件教程

软件实例分享&#xff0c;乒乓球俱乐部会员系统管理软件教程 一、前言 以下软件程序教程以 佳易王乒乓球馆计时计费软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 多种计费方式&#xff0c;可以按单价&#xff0c;也可以按时间段 可…