当前位置: 首页 > news >正文

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

官网:Apache Dubbo

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

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

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

工作原理图
在这里插入图片描述
以上是 Dubbo 的工作原理图,从抽象架构上分为两层:服务治理抽象控制面Dubbo 数据面

  • 服务治理控制面。服务治理控制面不是特指如注册中心类的单个具体组件,而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo Admin 控制台等,如果采用了 Service Mesh 架构则还包含 Istio 等服务网格控制面。
  • Dubbo 数据面。 数据面代表集群部署的所有 Dubbo 进程,进程之间通过 RPC 协议实现数据交换,Dubbo 定义了微服务应用开发与调用规范并负责完成数据传输的编解码工作。
    • 服务消费者 (Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程
    • 服务提供者 (Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进程

快速上手

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

1、环境搭建

创建基础项目父模块,再分别创建三个子模块(consumer、interface、provider)

在这里插入图片描述

2、导入依赖

1、父模块
    <properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><dubbo.version>3.2.0-beta.4</dubbo.version><spring-boot.version>2.6.11</spring-boot.version></properties><dependencyManagement><dependencies><!-- Spring Boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!--springcloudalibaba--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.4.0</version><type>pom</type><scope>import</scope></dependency><!--nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.0.4.0</version><type>pom</type><scope>import</scope></dependency><!-- Dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-bom</artifactId><version>${dubbo.version}</version><type>pom</type><scope>import</scope></dependency><!-- Dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
2、子模块

分别在consumer、provider导入依赖

    <dependencies><!-- Api接口 --><dependency><groupId>com.ruoyi</groupId><artifactId>interface</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><!-- spring boot starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--Nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies>

3、配置文件

分别在consumer、provider编写配置文件

1、服务提供者(provider)
dubbo:application:name: Dubbo-provider  #Dubbo服务名称qos-enable: falseprotocol:name: dubbo  #协议名称port: -1  #端口号,-1表示自动分配registry:address: nacos://localhost:8848 #注册中心地址server:port: 9001
spring:application:name:   SpringBoot-Nacos-Dubbo-provider #Nacos注册中心服务名称
2、消费者(consumer)
dubbo:application:name: Dubbo-consumer  #Dubbo服务名称
#    qos-enable: falseprotocol:name: dubbo  #协议名称port: -1  #端口号,-1表示自动分配registry:address: nacos://localhost:8848 #注册中心地址server:port: 8082
spring:application:name:   SpringBoot-Nacos-Dubbo-consumer #Nacos注册中心服务名称

4、接口API

1、在interface模块中编写接口

在这里插入图片描述

/*** 在 DemoService 中,定义了 sayHello 这个方法。后续服务端发布的服务,消费端订阅的服务都是围绕着 DemoService 接口展开的*/
public interface DubboDemoService {String sayHello(String name);
}
2、在provider模块中编写实现类

在这里插入图片描述

/*** 定义了服务接口之后,可以在服务端这一侧定义对应的实现,这部分的实现相对于消费端来说是远端的实现,本地没有相关的信息。*/
@DubboService // 暴露服务  通过这个配置可以基于 Spring Boot 去发布 Dubbo 服务。
public class DubboDemoServiceImpl implements DubboDemoService {@Overridepublic String sayHello(String name) {System.err.println("服务提供者,我被Dobbo调用了");return "Hello" + name ;}
}

5、消费者(consumer)Controller

在这里插入图片描述

@RestController
@RequestMapping("/consumer")
public class ConsumerController {@DubboReferenceprivate DubboDemoService dubboDemoService;@GetMapping("/test")public String test(){return dubboDemoService.sayHello("微服务 SpringBoot整合Nacos+Dubbo");}
}

6、启动类

分别在consumer、provider编写配置启动类,并且启动项目

在这里插入图片描述

1、consumer
@SpringBootApplication
@EnableDubbo
public class ConsumerApplication_8082 {public static void main(String[] args) {SpringApplication.run(ConsumerApplication_8082.class,args);}
}
2、provider
@SpringBootApplication
@EnableDubbo
public class ProviderApplication_9001 {public static void main(String[] args) {SpringApplication.run(ProviderApplication_9001.class,args);}
}

启动服务提供者和消费者

在这里插入图片描述

浏览器访问消费者中的Controller localhost:8082/consumer/test

在这里插入图片描述
在这里插入图片描述

相关文章:

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

官网&#xff1a;Apache Dubbo 随着互联网技术的飞速发展&#xff0c;越来越多的企业和开发者开始关注微服务架构。微服务架构可以将一个大型的应用拆分成多个独立、可扩展、可维护的小型服务&#xff0c;每个服务负责实现应用的一部分功能。这种架构方式可以提高开发效率&…...

读书的意义

...

第66集《摄大乘论》

请大家打开《讲义》第二二二页&#xff1a; 庚九、念(分二&#xff1a;辛一正念法身&#xff1b;辛二兼显净土) 辛一、正念法身(分二&#xff1a;壬一征&#xff1b;壬二释) 壬一、征 这个是讲到十门分别(二0三页)&#xff0c;分别清净法身的第九段&#xff0c;讲到念&…...

VMware 桥接网络突然无法上网

VMware 桥接网络突然无法上网 0. 问题1. 解决方法 0. 问题 昨天&#xff0c;VMware 桥接网络正常使用&#xff0c;今天突然无法上网。 1. 解决方法 打开VMware的虚拟网络编辑器&#xff0c;将桥接模式的网络从“自动”改成你要使用的网卡&#xff0c;问题解决。 完成&#…...

面试题——Redis

★1.简述一下缓存穿透,缓存击穿,缓存雪崩 ? 缓存穿透:大量恶意请求一个不存在的数据,使得压力绕过Redis缓存层打到数据库,造成数据库瘫痪 处理:①设置黑名单,维护一个可能存在也可能不存在的黑名单数据列表,对请求进行过滤(简单高效) ②布隆过滤器,会出现误删,且相对麻烦(不…...

Java——构造器(构造方法)和 this

一、什么是构造器 构造器&#xff08;Constructor&#xff09;是Java类的一种特殊方法&#xff0c;用于初始化对象的状态。构造器在创建对象时被调用&#xff0c;可以对对象的成员变量进行初始化。 我之前的文章《Java——类和对象-CSDN博客》中也提到了构造器。 二、构造器…...

MySQL-连接查询

049-内连接之等值连接 案例&#xff1a;查询每个员工所在的部门名称&#xff0c;要求显示员工名、部门名。 select e.ename, d.dname from emp e inner join dept d on e.deptnod.deptno;注意&#xff1a;inner可以省略 select e.ename, d.dname from emp e join dept d on…...

适合小白学习的项目1832javaERP管理系统之仓库采购管理Myeclipse开发mysql数据库servlet结构java编程计算机网页项目

一、源码特点 java erp管理系统之仓库采购管理是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了serlvet设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…...

分布式技术导论 — 探索分析从起源到现今的巅峰之旅(分布式技术)

分析探索从起源到现今的巅峰之旅 背景介绍数据可伸缩性案例 计算可伸缩性案例 代价和权衡分布式的代价分布式的权衡权衡策略 分布式技术方向数据系统运算系统 分布式数据系统Partition&#xff08;分区&#xff09;Round-Robin&#xff08;轮询&#xff09;局限性 Range&#x…...

基于Python+OpenCV+SVM车牌识别系统(GUI界面)【W3】

简介&#xff1a; 随着交通管理的日益复杂化和智能化需求的增加&#xff0c;车牌识别系统在安防、智慧交通管理等领域中扮演着重要角色。传统的车牌识别系统主要基于图像处理和模式识别技术&#xff0c;随着计算机视觉技术的发展&#xff0c;基于Python、OpenCV和机器学习算法的…...

ansible.cfg forks参数

在Ansible的配置文件ansible.cfg中&#xff0c;forks参数是一个非常关键的设置&#xff0c;它控制了Ansible执行任务时的并发连接数&#xff0c;直接影响到Ansible执行 playbook 或 ad-hoc 命令时的速度和效率。 意义与作用 并发控制&#xff1a;当你使用Ansible来管理多台主…...

Web前端写随机抽奖:技术与创意的碰撞

Web前端写随机抽奖&#xff1a;技术与创意的碰撞 在Web前端的世界里&#xff0c;随机抽奖功能不仅是一种常见的交互元素&#xff0c;更是技术与创意的完美结合。下面&#xff0c;我们将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入探讨Web前端实现随机抽奖的技术…...

Centos系统yum安装mysql数据库

安装之前需要将系统自带的mariadb-libs软件包删除。 检查是否存在mariadb-libs包。 yum list installed|grep mariadb-libs 删除mariadb-libs包 yum -y remove mariadb-libs 声明&#xff1a; 系统&#xff1a;CentOS-7-x86_64-DVD-2009 安装为最小化安装&#xff0c;没…...

使用Selenium进行Web自动化:详细操作指南

使用Selenium进行Web自动化:详细操作指南 引言 Selenium是一个广泛使用的开源工具,用于自动化Web浏览器的操作。无论你是进行自动化测试,还是需要抓取网页数据,Selenium都是一个非常有用的工具。本文将详细介绍Selenium的一些常见用法,包括输入框设置值、文件上传、单选…...

手机照片免费数据恢复软件EasyRecovery2024免费版下载

大家好&#xff01;今天我要给大家推荐一款非常棒的软件——EasyRecovery。相信大家都知道&#xff0c;电脑中的重要文件一旦丢失&#xff0c;对我们的工作和学习都会产生很大的影响。 而EasyRecovery软件就是专门解决这个问题的利器&#xff01;它能够帮助我们快速、有效地恢…...

【工具】新手如何正确使用Pycharm?

1. 什么是JetBrains Toolbox JetBrains Toolbox是一个管理工具&#xff0c;用于安装、更新和管理JetBrains开发工具的所有版本。它可以简化多个IDE的管理&#xff0c;并确保你总是使用最新版本的软件。 2. 安装JetBrains Toolbox 步骤1&#xff1a;下载Toolbox 访问JetBrai…...

【JavaEE精炼宝库】多线程(6)线程池

目录 一、线程池的概念及优势 1.1 线程池的概念&#xff1a; 1.2 线程池的优势&#xff1a; 二、工厂模式 三、标准库中的线程池 3.1 标准库线程池参数解释&#xff1a; 3.1.1 corePoolSize | maximumPoolSize&#xff1a; 3.1.2 keepAliveTime | unit&#xff1a; 3.1…...

数据仓库和数据库的区别

数据仓库和数据库在许多方面存在显著的区别&#xff0c;主要体现在数据的用途、架构、设计原则和性能优化上。以下是两者之间的详细区别&#xff1a; 1. 目的和用途 数据库&#xff08;Database&#xff09;&#xff1a; 主要用途&#xff1a;用于日常业务操作和事务处理。数据…...

芯片验证分享7 —— 代码审查1

大家好&#xff0c;我是谷公子&#xff0c;前几节课给大家分享了如何设计激励&#xff0c;今天我们来如何进行代码审查。 之前讨论的是基于计算机的验证技术&#xff0c;现在讨论非基于计算机的验证过程(即“人工验证”&#xff0c;或代码审查)。代码审查在查找错误方面非常有…...

Shell脚本从入门到实战

一、概述 shell 是一个命令行解释器&#xff0c;它接受应用程序、用户命令&#xff0c;然后调用操作系统内核。 shell 还是一个功能强大编程语言&#xff0c;易调试&#xff0c;易编写&#xff0c;灵活性强。 二、mac 怎么重启docker 1.如何重启 Docker on Mac 在 macOS 上…...

Docker 的了解和使用

1. 虚拟化全虚拟化&#xff1a;虚拟机的操作系统可以和宿主机的操作系统完全不同。os层虚拟化&#xff1a;操作内核相同&#xff0c;软件虚拟化。2. docker安装 Docker容器本质上是Linux容器&#xff0c;它需要Linux内核环境才能运行。在Windows上直接运行Docker&#xff0c;需…...

如何实现微信聊天记录永久保存:WeChatMsg完整备份终极指南

如何实现微信聊天记录永久保存&#xff1a;WeChatMsg完整备份终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...

避坑指南:海康威视工业相机SDK二次开发常见问题排查(从环境配置到图像采集)

海康威视工业相机SDK开发实战&#xff1a;从环境搭建到图像处理的深度避坑指南 工业视觉领域的开发者们&#xff0c;是否曾在深夜调试海康威视相机SDK时&#xff0c;被突如其来的"DLL缺失"错误打断思路&#xff1f;或是明明按照文档配置了项目属性&#xff0c;却始终…...

关于岐金兰AI元人文构想与江畅《论道德真理》之关系的理论说明

关于岐金兰AI元人文构想与江畅《论道德真理》之关系的理论说明——致敬江畅教授&#xff0c;并申明独立研究的道路岐金兰2026年5月12日一、相遇&#xff1a;迟到的阅读&#xff0c;及时的对话2026年3月11日&#xff0c;我在一个偶然的学术检索中读到了江畅教授的《论道德真理》…...

智能产品系统架构分析 - 智能办公系统架构分层

方向&#xff1a;方案分析、架构设计、模块分解 智能产品系统架构分析&#xff1a;智能办公系统架构分层。 对智能办公系统进行架构分层分析&#xff0c;给出实例、UML建模、项目结构等。 “智能产品系统架构分析&#xff1a;智能办公系统架构分层”。 包含设备控制、预约管…...

keil 使用UTF8格式的文件,但是printf打印中文已经是乱码的问题

文件格式是UTF8 无bom格式 打开文件显示是正常的 编译器选择的是ANSI格式 编译依旧产生警告 在 Project → Options → C/C → Misc Controls 添加 --no-multibyte-chars就可以解决&#xff1b; 但是ai给我这个方案&#xff0c;我还没有尝试 –wide-chars 示例是这样的 wchar_…...

2026年强烈建议收藏:八大热门AI编程工具权威评测

AI编程工具已全面进入智能体时代&#xff0c;从单一代码补全进化为全流程开发引擎。本文精选8款全球主流工具&#xff0c;从核心能力、场景适配、使用体验等维度客观解析&#xff0c;为开发者提供精准选型参考。 一、Trae&#xff08;字节跳动旗下&#xff09;—— 全链路AI原生…...

开源情报工具Openeir:自动化资产发现与关联分析实战指南

1. 项目概述&#xff1a;一个开源情报&#xff08;OSINT&#xff09;工具的诞生与使命 在信息爆炸的时代&#xff0c;数据本身不再是稀缺品&#xff0c;如何从海量、异构、碎片化的公开信息中&#xff0c;精准、高效地提取出有价值的情报&#xff0c;才是真正的挑战。无论是安全…...

2026年AI大模型接口加速站亲测:六家平台横评,诗云API(ShiyunApi)成最优之选

在进行AI开发时&#xff0c;一个现实问题摆在眼前&#xff1a;如何接入模型厂商的官方API&#xff1f;对于海外开发者而言&#xff0c;注册、绑卡、调用这三步便能轻松解决。然而&#xff0c;国内开发者却面临着诸多难题&#xff0c;如跨境网络波动、外币支付门槛、发票合规需求…...

通用大模型vs行业垂直AI Agent,制造业落地对比:2026年企业级智能体选型深度解析

进入2026年&#xff0c;人工智能在制造业的落地已从早期的“对话式交互”全面转向“任务式闭环”。通用大模型&#xff08;Foundation Models&#xff09;与行业垂直AI Agent&#xff08;Vertical AI Agents&#xff09;在工业场景中的角色分工日益明确。根据IDC最新发布的《20…...