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

【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

文章目录

  • 一、需求
    • 环境/版本
  • 二、须知
    • 2.1、什么是RPC?
    • 2.2、什么是Dubbo?
    • 2.3、什么是Nacos?
  • 三、普通的SpringBoot项目集成微服务组件方案(笔者给出两种)
    • 方案一(推荐)
      • 1、导入maven依赖(消费者和提供者都是一样的)
      • 2、配置application.yml文件(消费者)
      • 配置application.yml文件(提供者)
      • 3、统一接口类(注意看包名,因为消费者和提供者的包名要一致)
      • 4、提供者的接口(接口上添加@DubboService注解)
      • 5、消费者调用接口
      • 6、调用成功
    • **温馨提示:**
    • 方案二
    • interface模块
  • 祝您开发愉快!

一、需求

在日益增长的业务需求中,一开始使用的是每个项目独立开发,虽然都是前后端分离的项目,但是每一个项目之间互不干扰。后来,因为某种需求,需要几个项目的数据相互交错获取。

最开始的想法就是集成多个数据源。

举例

有A、B、C三个项目,对应着数据库DBa、DBb、DBc、,现在A项目需要同时操作DBa、DBc数据库。

这时,最理想就是调用RPC框架了。

环境/版本

IDEA2022.3.2
java11
SpringBoot 2.7.12-SNAPSHOT
Nacos 2.2.2

注意:如果使用SpringBoot3.x以上的要使用jdk17以上的,否则会启动报错。

二、须知

2.1、什么是RPC?

RPC全称为Remote Procedure Call,翻译为远程过程调用。它是一种计算机网络通信协议,用于在不同的进程或计算机之间进行通信,让它们像调用本地方法一样调用远程方法。

假设你有一个应用程序,它需要调用另外一个计算机上的函数或方法,通常情况下,你需要通过网络编程,手动发送请求和接收响应。而RPC则可以让你像调用本地函数一样,直接调用远程函数,简化了网络编程的复杂度。

具体来说,RPC通信过程中,调用方会像调用本地方法一样,发送请求到远程服务器,请求中包含了要调用的方法名和参数列表。远程服务器接收到请求后,会解析请求,调用对应的方法,并将执行结果返回给调用方。调用方收到响应后,就可以像处理本地函数一样,对结果进行处理。

通俗来说,RPC就像是你在打电话时,向远程的对方说出你需要做的事情,对方完成后告诉你结果。这样,你就不需要亲自去完成任务了,这个过程中,你只需要关心需要完成的任务和结果,不需要关心具体的实现方式。

RPC在分布式系统中的应用非常广泛,比如微服务架构中的服务调用,Hadoop中的远程过程调用等。它可以让分布式系统更加简单、灵活和可扩展。

2.2、什么是Dubbo?

背景
Dubbo的诞生背景可以追溯到2011年,当时阿里巴巴内部的分布式架构和服务治理已经比较成熟,但面对日益增长的业务规模和复杂性,分布式服务之间的调用和管理成为了一个巨大的挑战。在这样的背景下,Dubbo应运而生。

Dubbo最初由阿里巴巴公司的工程师提出并开发,旨在为阿里巴巴内部的分布式系统提供一种高性能、可靠、可扩展的RPC框架,帮助阿里巴巴更好地构建分布式服务架构和实现服务治理。

后来,随着Dubbo逐渐成熟并在阿里巴巴内部广泛应用,阿里巴巴决定将其开源,于2011年底正式发布第一个版本,随后在2012年和2015年分别发布了2.0和2.5版本,以及2019年发布的2.7版本。Dubbo的开源以及不断更新迭代,吸引了越来越多的用户和开发者参与,逐渐成为了Java生态系统中最受欢迎的RPC框架之一。

如今,Dubbo已经广泛应用于阿里巴巴、华为、网易等企业的分布式系统中,并得到了国内外各大互联网公司和社区的广泛认可和支持。

2018年11月,Apache Dubbo 成为了 Apache 的顶级项目,这意味着 Dubbo 已经发展成为一个非常成熟、高质量、社区活跃的开源项目。Dubbo 的加入也进一步加强了 Apache 在分布式系统领域的地位,为分布式系统的发展和推广做出了巨大贡献。

作用

Dubbo主要包括三个核心模块:

Provider(服务提供者):暴露服务的应用,提供服务的方法。

Consumer(服务消费者):调用远程服务的应用,消费服务的方法。

Registry(服务注册中心):服务注册与发现的管理中心。

Dubbo框架的工作流程如下:

1、服务提供者启动,向注册中心注册自己提供的服务。

2、服务消费者启动,向注册中心订阅自己需要的服务。

3、注册中心返回可用的服务列表给服务消费者。

4、服务消费者调用远程服务。

5、远程服务提供者响应请求,返回结果给服务消费者。

6、服务消费者收到响应,完成调用。

2.3、什么是Nacos?

Nacos是一种基于云原生理念构建的动态服务发现、配置管理和服务治理平台,由阿里巴巴开源团队于2018年开源。它主要解决了分布式系统中服务注册、发现、配置管理和DNS服务等问题。

Nacos提供了以下核心功能:

1、服务注册和发现:Nacos可以帮助服务提供者自动注册服务并向Nacos Server汇报服务实例的健康状况,服务消费者可以通过Nacos查询可用服务实例。

2、配置管理:Nacos提供了集中式的配置管理功能,支持动态配置、版本管理、灰度发布、监听等功能,可以方便地管理分布式系统中的配置信息。

3、服务路由和负载均衡:Nacos支持服务提供者和消费者之间的流量管理和路由规则的动态更新,以及多种负载均衡策略。

4、DNS服务:Nacos支持提供DNS服务,可以在无需其他服务发现组件的情况下使用DNS方式进行服务发现。


温馨提示:Dubbo官网上默认的注册中心是Zookeeper,本文注册中心使用的是Nacos。

三、普通的SpringBoot项目集成微服务组件方案(笔者给出两种)

方案一(推荐)

像笔者这种的项目(看 需求),就是因为发展而演变成要使用微服务组件,而不是一开始就选好微服务架构的。就看这个部分就好了。否则请看方案二。

1、导入maven依赖(消费者和提供者都是一样的)

		<!--nacos--><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.2.2</version></dependency><!-- dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.2.0-beta.6</version></dependency>

启动类加上注解@EnableDubbo
在这里插入图片描述

2、配置application.yml文件(消费者)

server:port: 8102
spring:cloud:nacos:server-addr: localhost:8848
dubbo:consumer:check: falseapplication:name: dubbo-springboot-demo-consumerprotocol:name: dubbo# 设置为-1表示自动配置可用端口port: -1registry:address: nacos://127.0.0.1:8848

配置application.yml文件(提供者)

server:port: 8105
spring:cloud:nacos:server-addr: localhost:8848
dubbo:application:name: dubbo-springboot-demo-providerprotocol:name: dubboport: -1registry:address: nacos://127.0.0.1:8848

3、统一接口类(注意看包名,因为消费者和提供者的包名要一致)

package com.example.astar.component;public interface DemoService {String sayHello(String name);
}

4、提供者的接口(接口上添加@DubboService注解)

package com.example.astar.service.Impl;import com.example.astar.component.DemoService;// 注意包名
import org.apache.dubbo.config.annotation.DubboService;@DubboService
public class AstarServiceImpl implements DemoService {private static int flag = 0;@Overridepublic String sayHello(String name) {String message = "你好啊! " + name + " =========》 " + flag++;return message;}
}

5、消费者调用接口

package com.example.astar.controller;import com.example.astar.component.DemoService;//注意包名
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user")
public class UserController {@DubboReferenceprivate DemoService demoService;@GetMapping("/1")public String hello() {String result = demoService.sayHello("Astar");String re = "Receive result ======> " + result;System.out.println(re);return re;}
}

6、调用成功

启动这两个项目(消费者和提供者),因为消费者配置了check: false,所以先启动哪一个项目都是可以的。消费者的端口是8102,我们访问一下

http://localhost:8102/user/1

看到如下
在这里插入图片描述

温馨提示:

DemoService的全限定包名是import com.example.astar.component.DemoService,也就是说消费者和提供者之间的桥梁就是来自同一个接口,我们需要在项目中分别创建一模一样的接口才可以,实现类不用管。如果提供者和消费者的接口的包名不一样就会导致调用失败。

说人话:就是两个项目都不在一个文件下,怎么可能用同一个类?这里只要这个类本身、包名一样就可以了,Dubbo就会认为是一样的。

方案二

此方案是在一开始就决定用微服务这个框架的项目来说的,通常我们会分为类似以下几个子模块:

在这里插入图片描述

interface模块

在这里插入图片描述
步骤我就懒得说了,大致和方案一一样,不同的地方是公共模块interface的导入:
在消费者和提供者上添加子模块即可:

        <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-samples-spring-boot-interface</artifactId><version>1.0-SNAPSHOT</version></dependency>

温馨提示:打包的时候会把子模块的引入部分一起打包,不用担心,正常使用即可,其余部分不变。

END


茫茫人海路漫漫,
潜心修炼方有颜。
踏实走好每一步,
静待花开见真章。

祝您开发愉快!

相关文章:

【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

文章目录 一、需求环境/版本 二、须知2.1、什么是RPC&#xff1f;2.2、什么是Dubbo&#xff1f;2.3、什么是Nacos&#xff1f; 三、普通的SpringBoot项目集成微服务组件方案&#xff08;笔者给出两种&#xff09;方案一&#xff08;推荐&#xff09;1、导入maven依赖&#xff0…...

MySQL主从同步(开GTID)

目录 一、搭建简单的主从同步 二、mysql删除主从&#xff08;若没有配置过可以不用进行这一步&#xff09; 1、停止slave服务器的主从同步 2、重置master服务 三、开启GTID 1、Master配置 2、Slave配置 一、搭建简单的主从同步 GTID原理&#xff1a;http://t.csdn.cn/g…...

打造精细化调研,这些产品榜上有名,你用了吗?

调查问卷是一种流行的数据收集工具&#xff0c;研究人员、营销人员和企业使用它来征求目标受众的反馈意见。调查问卷工具使创建、分发和分析调查问卷的过程变得更加简单和高效。想要做好一份调查问卷&#xff0c;选择一款好用的工具是少不了的。不过&#xff0c;在众多的问卷工…...

[golang gin框架] 37.ElasticSearch 全文搜索引擎的使用

一.全文搜索引擎 ElasticSearch 的介绍&#xff0c;以及安装配置前的准备工作 介绍 ElasticSearch 是一个基于 Lucene 的 搜索服务器,它提供了一个 分布式多用户能力的 全文搜索引擎&#xff0c;基于 RESTful web 接口,Elasticsearch 是用 Java 开发的&#xff0c;并作为 Apach…...

赋的几个发展阶段

赋&#xff0c;起源于战国&#xff0c;形成于汉代&#xff0c;是由楚辞衍化出来的&#xff0c;也继承了《诗经》讽刺的传统。关于诗和赋的区别&#xff0c;晋代文学家陆机在《文赋》里曾说: 诗缘情而绮靡&#xff0c;赋体物而浏亮。 也就是说&#xff0c;诗是用来抒发主观感情…...

Model-Free TD Control: Sarsa

import time import random # 相对于Q 效果会差一些 class Env():def __init__(self, length, height):# define the height and length of the mapself.length lengthself.height height# define the agents start positionself.x 0self.y 0def render(self, frames50):fo…...

CloudBase CMS的开发注意事项

引言 在进行基于云开发的微信小程序开发时为了减轻工作量打算用CloudBase CMS来减轻工作量&#xff0c;随后去了解并体验了CloudBase CMS的使用&#xff0c;总体来说还有些许问题没有解决&#xff0c;对减轻后台管理工作并没有起到很大的作用。 项目情景 使用CloudBase CMS来管…...

大佬联合署名!反对 ACL 设置匿名期!

夕小瑶科技说 原创 作者 | 智商掉了一地、Python 近日&#xff0c;自然语言处理领域的多位知名学者联合发起了一项反对 ACL 设置匿名期的联合署名行动&#xff0c;包括著名学者 William Wang 和 Yoav Goldberg 在内&#xff0c;还有Christopher Potts、Hal Daume、Luke Zettl…...

【JavaSE】Java基础语法(十四):Static

文章目录 概述特点与应用注意事项为什么一个静态方法中只能访问用static修饰的成员? 概述 Java中的static是一个修饰符&#xff08;也可称关键字&#xff09;&#xff0c;可以用于修饰变量、方法和代码块。 特点与应用 static修饰的成员具有以下特点&#xff1a; 被类的所有对…...

1.Linux初识

在 Linux 系统中&#xff0c;sudo 是一个重要的命令&#xff0c;可以允许普通用户以管理员权限来运行特定的命令。通过 sudo 命令&#xff0c;普通用户可以暂时获取管理员权限&#xff0c;执行需要管理员身份才能执行的操作。 下面是一些关于 sudo 命令的用法&#xff1a; 以管…...

进程(二)

这一节我们写个MFC剪切板程序 1.下载相应的组件 工具->工具视图&#xff0c;因为之前已经下载过一部分了&#xff0c;这里如果创建MFC报错的话&#xff0c;就要把没下载的补上 此项目需要MFC库 解决方法 2.创建MFC程序 3.打开资源视图&#xff0c;直接在菜单栏顶部搜索…...

《消息队列高手课》课程笔记(二)

消息模型&#xff1a;主题和队列有什么区别&#xff1f; 两类消息模型 早期的消息队列&#xff0c;就是按照“队列”的数据结构来设计的。 生产者&#xff08;Producer&#xff09;发消息就是入队操作&#xff0c;消费者&#xff08;Consumer&#xff09;收消息就是出队也就是…...

以“智”提质丨信创呼叫

随着人工智能、大数据、云计算等新兴技术飞速发展&#xff0c;呼叫中心、全媒体智能客服等现已被广泛应用于多个行业领域。其中&#xff0c;呼叫中心作为政企对外服务的重要窗口&#xff0c;已从“传统电话营销”发展到“智能呼叫中心”阶段&#xff0c;以客户服务为核心&#…...

Pool与PG的说明以及Ceph的IO流程

Pool与PG的说明以及Ceph的IO流程 Pool与PG Ceph中的数据是以对象的形式存储在存储池(pool)中的。每个存储池都被划分为若干个存储组(PG)&#xff0c;每个存储组同时也是一个数据分片(shard)。存储组是Ceph用来实现数据的分布式存储和高可用的重要组成部分。每个存储组包含若干…...

20230529_Hadoop_集群操作命令

HDFS_集群操作命令&#xff1a; 一、集群启停命令 # 启动Hadoop的HDFS进程start-dfs.sh# 关闭Hadoop的HDFS进程stop-dfs.sh# 单独关闭某一个进程hadoop-daemon.sh start[/stop] namenode[/datanode/secondarynamenode]二、HDFS文件系统的基本信息 数据的路径表达方式&#xff…...

边缘计算AI硬件智能分析网关V1版的接入流程与使用步骤

我们的AI边缘计算网关硬件——智能分析网关目前有两个版本&#xff1a;V1版与V2版&#xff0c;两个版本都能实现对监控视频的智能识别和分析&#xff0c;支持抓拍、记录、告警等&#xff0c;在AI算法的种类上和视频接入上&#xff0c;两个版本存在些许的区别。V1的基础算法有人…...

【redis】Stream、String 超详细介绍

文章目录 一、Stream1.1 写入数据XADD条目 ID 的格式 1.2 获取数据XRANGE 和 XREVRANGEXREAD 监听新条目非阻塞形式阻塞形式 1.3 消费者组XGROUP 创建消费者组XREADGROUP 通过消费者组消费XACK 确认消息消费者组示例 1.4 XPENDING 和 XCLAIM 认领 其他消费者 的待处理消息XPEND…...

算法基础学习笔记——⑫最小生成树\二分图\质数\约数

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨最小生成树 &#x1f353;朴素Prim &#x1f353;Kruskal算法 ✨二分图 &#x1f353;匈牙利算法 ✨质数 &#x1f353;&#xff08;1&#xff09;质数的判定——试除法 &#x1f353;&#xff08;2&…...

了解信号的传输方式、编码与调制、信道的极限容量

1.了解信号的传输方式、编码与调制、信道的极限容量 笔记来源&#xff1a; 湖科大教书匠&#xff1a;传输方式 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 1.1 了解信号的传输方式 串行传输与并行传输 同步传输与异步传输 为什么需要收发双发…...

SpringBoot自动配置原理总结

1、我们需要从主启动类的SpringBootApplication注解开始分析&#xff1a; SpringBootApplication是一个复合注解&#xff0c;进入以后看到主要包括以下三个注解&#xff1a; SpringBootConfiguration EnableAutoConfiguration ComponentScan(excludeFilters { Filter(type …...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...