【springcloud 微服务】Spring Cloud Alibaba 整合Nacos实战

news/2024/9/17 13:38:16/

目录

一、前言

二、常用服务注册中心介绍

2.1 dubbo服务注册示意图

2.2 常用注册中心对比

三、nacos介绍

3.1  什么是nacos

3.2 nacos 特点

3.3 nacos生态链地图

四、nacos部署

4.1 下载安装包

4.2 修改脚本启动模式

4.3  启动nacos 服务

五、Spring Cloud Alibaba 整合Nacos

5.1  Spring Cloud Alibaba版本选型

5.2  实验整合案例说明

5.3  整合完整过程

5.3.1 创建聚合工程,包括两个子模块

5.3.2 根pom引入如下依赖

5.3.3 子模块导入如下依赖

5.3.4 工程配置文件

5.3.5 stock模块提供一个扣减库存接口

5.3.6 order模块提供一个下单接口

5.3.7 工程启动类

5.3.8 order模块添加配置类

5.4  模拟测试

5.4.1 启动服务

5.4.2 接口模拟调用

 六、写在最后


一、前言

近些年,随着微服务框架在越来越多的公司产品中实践落地,以Spring Cloud Alibaba为导向的一站式微服务解决方案也成为微服务实践和运用的风向标,Spring Cloud Alibaba提供了越来越完善的各类微服务治理组件,比如分布式服务配置与注册中心nacos,服务限流、熔断组件sentinel等,本篇先来介绍nacos的详细使用。

二、常用服务注册中心介绍

为什么需要注册中心呢?简单来说,随着微服务的个数增多,规模增大,再向以往那样,两个微服务之间直接通过拼接完整的请求url调用的话,微服务的维护成本将是巨大的,也不便于后续微服务的API统一治理。

事实上,微服务化的目的就是为了减少服务间的紧密耦合,同时,一定程度上减少服务与服务之间调用时更多的信息暴露,更直接点来说,就是说服务与服务之间的调用应该是去中心化的调用,而注册中心的好处就是为了达到此目的,注册中心提供了一种服务与服务之间互相发现的机制,通过注册中心,微服务提供的各类服务资源可以被统一纳管,进行集中式管理,这就是注册中心的好处。

2.1 dubbo服务注册示意图

下面是dubbo核心的经典的服务注册与调用示意图,其服务治理的核心就是注册中心:Registry的存在。

 

2.2 常用注册中心对比

下图列举了常用的几种分布式配置中心各个功能的对比,其他更多的配置中心,像eureka,zk,consul等也是可以使用的,具体可结合实际场景进行选择;

从上面的表的数据对比来看,springcloud alibaba为了更好的治理和打造自身的微服务生态体系,最终选择了自研的nacos,nacos即是分布式服务注册中心,同时也可以作为分布式配置中心使用,而且基于界面可视化操作客户端,提供了完善的治理方案。

三、nacos介绍

3.1  什么是nacos

一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。

 官网地址: 官网地址  ;  github地址:nacos git地址

3.2 nacos 特点

nacos的主要特点如下:
  • 服务发现和服务健康监测;
  • 动态配置服务;
  • 动态 DNS 服务;
  • 服务及其元数据管理;

简而言之

nacos 用于管理所有微服务、解决微服务之间调用关系错综复杂、难以维护的问题;

3.3 nacos生态链地图

下图详细介绍了nacos的生态,优势,业务,架构等多维度的全景图,由此可见,作为springcloud-alibaba微服务生态体系下的一款组件,其位置是非常重要的。

四、nacos部署

nacos在单机环境下安装部署非常简单,只需要下载好安装包之后,执行bin目录下的启动脚本即可快速启动服务,下面是完整的流程。

4.1 下载安装包

安装包下载地址:各版本下载地址

也可以根据自身的需要选择合适的版本下载使用;

 选择完版本后,可以选择linux或者windows环境的安装包下载即可;

 这里选择了zip压缩包

4.2 修改脚本启动模式

nacos启动脚本里面提供了集群模式和单机模式启动两种方式,由于本机搭建使用,选用单机模式即可,修改启动脚本中如下的关键参数;

 

4.3  启动nacos 服务

修改并保存脚本之后,双击启动服务

 

启动成功之后,按上图中地址访问nacos的客户端控制台,默认登录用户名和密码:nacos/nacos

 登录成功后,看到如下的控制台界面;

 

五、Spring Cloud Alibaba 整合Nacos

在真正进行代码整合之前,一定要弄清springloud alibaba版本选择的事情,很多同学在这里由于没弄清springloud alibaba与springboot的版本依赖,兼容性导致在整合过程中遇到较多的问题;

5.1  Spring Cloud Alibaba版本选型

下面摘取git中关于各个版本选型的详细对照,git地址:各版本依赖关系地址,最重要的就是springboot的版本与Spring Cloud Alibaba 版本的依赖关系;

5.2  实验整合案例说明

需求说明

1、创建两个微服务,order(订单)微服务,和stock(库存)微服务;

2、将两个微服务注册到nacos,通过nacos实现order服务对stock服务的调用;

5.3  整合完整过程

5.3.1 创建聚合工程,包括两个子模块

5.3.2 根pom引入如下依赖

有更多需要管理的jar,统一在dependencyManagement中加入即可;

<!-- 统一管理jar包版本 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><log4j.version>1.2.17</log4j.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.2.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR1</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.1.0.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

5.3.3 子模块导入如下依赖

这里暂时只需要导入springboot-web以及nacos的客户端即可;

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--nacos-config 配置中心-自带动态刷新--><!--<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>--><!--nacos-discovery 注册中心-服务发现与注册--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies>

5.3.4 工程配置文件

stock模块配置文件

server:port: 8085spring:application:name: stock-servicecloud:nacos:discovery:server-addr: localhost:8848 #服务注册中心地址#config:#server-addr: localhost:8848 #配置中心地址

order模块配置文件

server:port: 8083spring:application:name: order-servicecloud:nacos:discovery:server-addr: localhost:8848 #服务注册中心地址#config:#server-addr: localhost:8848 #配置中心地址service-url:nacos-user-service: http://stock-service

5.3.5 stock模块提供一个扣减库存接口

在stock模块中添加一个扣减库存的接口,给下单接口使用

@RestController
@RequestMapping("/stock")
public class StockController {@GetMapping("/reduct")public String reduct(){System.out.println("扣减库存");return "扣减库存";}}

5.3.6 order模块提供一个下单接口

@RestController
@RequestMapping("/order")
public class OrderController {@AutowiredRestTemplate restTemplate;@Value("${service-url.nacos-user-service}")private String serverURL;//localhost:8083/order/add@GetMapping("/add")public String add(){System.out.println("下单成功");//String forObject = restTemplate.getForObject("http://localhost:8082/stock/reduct", String.class);String forObject = restTemplate.getForObject(serverURL + "/stock/reduct", String.class);System.out.println(forObject);return "add order :" + forObject;}}

5.3.7 工程启动类

两个模块的启动类上面都加上@EnableDiscoveryClient 注解

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApp {public static void main(String[] args) {SpringApplication.run(OrderApp.class,args);}}

5.3.8 order模块添加配置类

由于spring-cloud-starter-alibaba-nacos-discovery默认集成的是Ribbon,我们知道Ribbon是基于客户端的负载均衡实现,所以这里的LoadBalancerClient的实现类是RibbonLoadBalancerClient,由Ribbon实现对RestTemplate的负载均衡,在当前的两个工程模块中,order作为客户端,所以需要在order模块中添加一个RestTemplate的配置类,并使用LoadBalanced注解进行修饰;

@Configuration
public class RestConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}}

5.4  模拟测试

5.4.1 启动服务

启动nacos,然后依次启动stock服务,order服务,在工程启动的时候,注意下面的关键信息,说明服务注册到了nacos;

启动完成之后,再次检查nacos的服务列表,可以发现上面正是两个工程的服务名;

 

5.4.2 接口模拟调用

浏览器调用order模块的下单接口:localhost:8083/order/add,看到如下效果,说明通过nacos实现对微服务的调用就成功了

 六、写在最后

在微服务架构的设计中,springcloud-alibaba作为一站式解决方案提供者,其每一个组件设计的背后都有着不错的思考和值得学习探究的地方,拿nacos来说,作为后起之秀,却能同时兼具注册中心和配置中心两用,有兴趣的同学可以撸一下源码,可能会有更多的收获。


http://www.ppmy.cn/news/30020.html

相关文章

刷题记录:CF1285D Dr. Evil Underscores 区间异或使序列最大值最小

传送门:CF 题目描述: 有一个长度为 n(1≤n≤105)n\ (1\leq n\leq 10^5)n (1≤n≤105) 的整数序列 a1,⋯,an(0≤ai≤230−1)a_1,\cdots,a_n\ \ (0\leq a_i\leq 2^{30}-1)a1​,⋯,an​ (0≤ai​≤230−1)&#xff0c;你需要找到一个非负整数 XXX 使得 max⁡(ai⊕X)\max(a_i\op…

【python】JSON数据类型与Python数据类型之间的转化

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录JSON格式文件JSON格式序列化与反序列化作用JSON常用数据结构键值对的集合值的有序列表JSON数据类型与Python数据类型之间的转化JSON格式和python的区别读写json文件dump 把python 写到json文件load 把json写…

C语言刷题(4)——“C”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容又到了我们的复习啦&#xff0c;那么还是刷题噢&#xff0c;话不多说&#xff0c;让我们进入C语言的世界吧 BC55 简单计算器 BC56 线段图案 BC57 正方形图案 BC58 直角三角形图案 BC59 翻转直角三角形图案 BC60 带空格…

蚁群算法优化问题

%%%%%%%%%%%%蚁群算法解决 TSP 问题%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%% clear all; %清除所有变量 close all; %清图 clc; %清屏 m 50; %蚂蚁个数 Alpha 1; %信息素重要程度参数 Beta 5; %启发式因子重要程度参数 Rho 0.1; %信息素蒸发系数 G 20…

嵌入式学习笔记——STM32硬件基础知识

STM32开发硬件知识前言STM32最小系统电源电路晶振电路复位电路BOOT选择电路调试接口电路其他电路本文重点本文参考博客链接前言 上一篇中我们重点是讲了一下怎么搭建开发环境以及怎么下载烧录的过程&#xff0c;这都是解决的电脑端的开发环境问题&#xff0c;还没有到实际的开…

【C++初阶】list的使用

大家好我是沐曦希&#x1f495; 文章目录一、前言二、构造三、迭代器四、增删查改1.头插头删2.尾插尾删3.查找和插入4.删除五、其他成员函数1.排序和去重2.splice和remove3.resize一、前言 list本质是带头双向循环链表&#xff0c;本文只对list的一些常用接口进行说明&#xf…

用逻辑回归制作评分卡

目录 一.评分卡 二.导库&#xff0c;获取数据 三.探索数据与数据预处理 1.去除重复值 2.填补缺失值 3.描述性统计处理异常值 4.为什么不统一量纲&#xff0c;也不标准化数据分布 5.样本不均衡问题 6.分训练集和测试集 三.分箱 1.分多少个箱子才合适 2.分箱要达成什么…

真香,Grafana开源Loki日志系统取代ELK?

一、Loki是什么&#xff1f; Loki是由Grafana Labs开源的一个水平可扩展、高可用性&#xff0c;多租户的日志聚合系统的日志聚合系统。它的设计初衷是为了解决在大规模分布式系统中&#xff0c;处理海量日志的问题。Loki采用了分布式的架构&#xff0c;并且与Prometheus、Graf…

51单片机入门————数码管显示

我们在马路上看到的红绿灯&#xff0c;就是由数码管来实现的&#xff0c;就是其中可能加入了一些延时和转换数码管是通过控制138译码器与74HC245来控制数码管的亮灭与数字的显示电路原理图我们先讨论一个数码管数码管有共阳极和共阴极&#xff0c;我们现在使用的STC89C52是共阴…

Linux用户空间与内核空间通信(Netlink通信机制)

一&#xff0c;什么是Netlink通信机制 Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信&#xff0c;但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式&#xff0c;一般不用Netlink。除非需要…

Cadence Allegro 导出Bill of Material Report (Condensed)详解

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,Bill of Material Report (Condensed)作用3,Bill of Material Report (Condensed)示例4,Bill of Material Report (Condensed)导出方法4.1,方法14.2,方法2,

第十三届蓝桥杯

这里写目录标题一、刷题统计&#xff08;ceil函数返回的是等值于某最小整数的浮点值&#xff0c;不强制转换回int就wa&#xff0c;没错就连和int整数相加都wa二、修剪灌木&#xff08;主要应看清楚会调转方向三、统计子矩阵&#xff08;前缀和滑动窗口⭐&#xff09;四、[积木画…

十大经典排序算法【快速了解】

文章目录一、算法分类二、经典排序算法总览三、算法复杂度四、代码实现一、算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a; 通过比较来决定元素间的相对次序由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。 非…

xgboost: 分割查找算法:贪婪算法、分桶算法

1、Basic Exact Greedy Algorithm 树学习的关键问题之一是找到最好的分割&#xff0c;如Eq(7)所示。 贪婪算法:分割查找算法枚举所有特征上的所有可能的分割。精确的贪婪算法如Alg. 1所示。为了高效地完成这一任务&#xff0c;算法必须首先根据特征值对数据进行排序&#xff…

配置本地 python GEE、geemap环境

1.安装anconda 百度搜索anconda清华镜像&#xff0c;从清华镜像中选择最新的anconda安装包&#xff0c;国内镜像网站下载速度较快&#xff0c;如果从国外官网下载速度相当慢&#xff0c;详细安装教程请参考&#xff1a; anconda安装教程https://blog.csdn.net/lwbCUMT/article…

MyBatis高频面试专题

一、介绍下MyBatis中的工作原理 1。介绍MyBatis的基本情况&#xff1a;ORM 2。原理&#xff1a; MyBatis框架的初始化操作处理SQL请求的流程 1.系统启动的时候会加载解析全局配置文件和对应映射文件。加载解析的相关信息存储在 Configuration 对象 Testpublic void test1(…

JavaScript(JS)

一、三种引入方式&#xff1a; 1、内部js 通过script标签嵌入到html里面 <script>alert(hello);</script> 2、外部js 写成一个单独的.js文件&#xff0c;让html引入进来 <script src"app.js"></script> 3、行内js 直接写到html内部 &…

SpringMVC文件上传、下载、国际化配置

Java知识点总结&#xff1a;想看的可以从这里进入 目录3.6、文件上传、下载3.6.1、文件上传3.6.2、文件下载3.7、国际化配置3.6、文件上传、下载 3.6.1、文件上传 form 表单想要具有文件上传功能&#xff0c;其必须满足以下 3 个条件。 form 表单的 method 属性必须设置为 p…

最近一年我都干了什么——反思!!

过去一年不管是学习方式还是心态上都和以往有了许多不同的地方&#xff0c;比较昏昏沉沉。最近慢慢找到状态了&#xff0c;就想赶紧记录下来。 学习 在学习新技术的过程中开始飘了&#xff0c;总感觉有了一些开发经验后就觉得什么都不用记&#xff0c;知道思路就行遇到了现场百…

Java高效率复习-SpringMVC[SpringMVC-2]

SpringMVC获取请求参数 SpringMVC获取请求参数的两种方式↓ 通过ServletAPI获取请求参数 将HttpServletRequest作为控制器方法的形参&#xff0c;此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象 通过request的API——getParameter(String s)方法来获取…