《Spring Cloud 微服务架构核心组件与 Nacos 配置管理详解》

news2024/11/29 8:48:08

微服务

1.SpringCloud中的核心组件

Spring Cloud Netflix组件

组件名称作用
Eureka服务注册中心
RibbonRibbon
Feign声明式服务调⽤
Hystrix客户端容错保护
ZuulAPI服务⽹关

Spring Cloud Alibaba组件

组件名称作用
Nacos服务注册中心
Sentinel客户端容错保护

Spring Cloud原⽣及其他组件

组件作用
Consul服务注册中心
Config分布式配置中心
GatewayAPI服务网关
Sleuth/Zipkin分布式链路追踪

2.服务调用

2.1RestTemplate介绍

Spring框架提供的RestTemplate类可⽤于在应⽤中调⽤rest服务,它简化了与http服务的通信⽅式,统⼀了RESTful的标准,封装了http链接, 我们只需要传⼊url及返回值类型即可。相较于之前常⽤的HttpClient ,RestTemplate是⼀种更优雅的调⽤RESTful服务的⽅式。

2.2RestTemplate方法介绍

image-20240821110900194

2.3通过RestTemplate调用微服务
在 shop_order⼯程中配置RestTemplate
//配置RestTemplate交给spring管理
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}

3.注册中心

3.1注册中心的主要作用

服务注册中⼼(下称注册中⼼)是微服务架构⾮常重要的⼀个组件,在微服务架构⾥主要起到了协调者的⼀个作⽤。注册中⼼⼀般包含如下⼏个功能:

  1. 服务发现:

● 服务注册/反注册:保存服务提供者和服务调⽤者的信息

● 服务订阅/取消订阅:服务调⽤者订阅服务提供者的信息,最好有实时推送的功能

● 服务路由(可选):具有筛选整合服务提供者的能⼒。

  1. 服务配置:

● 配置订阅:服务提供者和服务调⽤者订阅微服务相关的配置

● 配置下发:主动将配置推送给服务提供者和服务调⽤者

  1. 服务健康检测

● 检测服务提供者的健康情况

3.2常见的注册中心
Zookeeper
zookeeper它是⼀个分布式服务框架,是Apache Hadoop 的⼀个⼦项⽬,它主要是⽤来解决分布式应⽤中经常遇到的⼀些数据管理问题,如:统⼀命名服务、状态同步服务、集群管理、分布式应⽤配置项的管理等。简单来说zookeeper=⽂件系统+监听通知机制。

Eureka
Eureka是在Java语⾔上,基于Restful Api开发的服务注册与发现组件,Springcloud Netflix中的重要组件
Eureka闭源影响:
    在EurakaGitHub上,宣布Eureka 2.x闭源。近这意味着如果开发者继续使⽤作为 2.x 分⽀上现有⼯作repo ⼀部分发布的代码库和⼯		件,则将⾃负⻛险

Consul
Consul是由HashiCorp基于Go语⾔开发的⽀持多数据中⼼分布式⾼可⽤的服务发布和注册服务软件, 采⽤Raft算法保证服务的⼀致性,且⽀持健康检查。

Nacos
Nacos是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是注册中⼼ + 配置中⼼的组合,提供简单易⽤的特性集,帮助我们解决微服务开发必会涉及到的服务注册与发现,服务配置,服务管理等问题。 Nacos 还是 Spring Cloud Alibaba 组件之⼀,负责服务注册与发现。
组件名语言CAP致性算法服务健康检查对外暴露接口
EurekaJavaAP可配⽀持HTTP
ConsulGoCPRaft⽀持HTTP/DNS
ZookeeperJavaCPPaxos⽀持客户端
NacosJavaAPRaft⽀持HTTP

3.3 nacos简介

Nacos 致⼒于帮助您发现、配置和管理微服务。Nacos 提供了⼀组简单易⽤的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 nacos的作⽤就是⼀个注册中⼼,⽤来管理注册上来的各个微服务

3.3.1nacos实战入门
1.搭建nacos环境、安装
下载地址: https://github.com/alibaba/nacos/releases
下载zip格式的安装包,然后进⾏解压缩操作

2.启动nacos
#切换⽬录
cd nacos/bin
#命令启动
startup.cmd -m standalone
或者直接双击startup.cmd运⾏

3.访问nacos
打开浏览器输⼊http://localhost:8848/nacos,即可访问服务, 默认密码是nacos/nacos

3.4 Ribbon

3.4.1 什么是Ribbon

它是 Netflixfa 发布的⼀个负载均衡器,有助于控制 HTTP 和 TCP客户端⾏为。在 SpringCloud 中,Nacos⼀般配合Ribbon进⾏使⽤,Ribbon提供了客户端负载均衡的功能,Ribbon利⽤从Nacos中读取到的服务信息,在调⽤服务节点提供的服务时,会合理的进⾏负载。在SpringCloud中可以将注册中⼼和Ribbon配合使⽤,Ribbon⾃动的从注册中⼼中获取服务提供者的列表信息,并基于内置的负载均衡算法,请求服务.

3.4.3 Ribbon作用

(1)服务调⽤

基于Ribbon实现服务调⽤, 是通过拉取到的所有服务列表组成(服务名-请求路径的)映射关系。借助RestTemplate 最终进⾏调⽤

(2)负载均衡

当有多个服务提供者时,Ribbon可以根据负载均衡的算法⾃动的选择需要调⽤的服务地址

3.4.4 Ribbon应用
1.在springcloud提供的服务发现的jar中以及包含了Ribbon的依赖。所以这⾥不需要导⼊任何额外的坐标

⽅式1:定义⼀个新的IRule(全局设置)
@Bean
public IRule randomRule(){
 return new RandomRule();
}

⽅式2:在yml配置⽂件中配置:(局部设置)
#需要调⽤的微服务名称
service-product:
	ribbon:
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

3.5 Nacos配置管理

image-20240821172412556

image-20240821172423343

执行流程:

image-20240821172456436

配置实现步骤:

1.引⼊nacos-config依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.添加bootstrap.yaml
不能使⽤原来的application.yml作为配置⽂件,⽽是新建⼀个bootstrap.yml作为配置⽂件
配置⽂件优先级(由⾼到低):
bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml
具体配置:
spring:
 application:
 name: service-product
 cloud:
 nacos:
 config:
 server-addr: 127.0.0.1:8848 #nacos中⼼地址
 file-extension: yaml # 配置⽂件格式
 profiles:
 active: dev # 环境标识,开发环境

3.在nacos中添加配置
配置热更新:
config:
 appName: product
方式一:在@Value注⼊的变量所在类上添加注解@RefreshScope:
@RestController
@RefreshScope//只需要在需要动态读取配置的类上添加此注解就可以
public class NacosConfigController {
 @Value("${config.appName}")
 private String appName;
 @GetMapping("/nacos-config-test1")
 public String nacosConfingTest1() {
 return appName;
	 }
}

方式二:硬编码⽅式
@RestController
public class NacosConfigController {
 @Autowired
 private ConfigurableApplicationContext applicationContext;
 
 @GetMapping("/nacos-config-test2")
 public String nacosConfingTest2() {
 return applicationContext.getEnvironment().getProperty("config.app
Name");
 	}
}

4.配置共享:
(1)同服务内配置共享:
	1. 新建⼀个以 spring.application.name 命名的配置⽂件,然后将其所有环境的公共配置放在⾥⾯
	2. 新建⼀个名为service-product-test.yaml配置存放测试环境的配置
	3. 新建⼀个名为service-product-dev.yaml配置存放开发环境的配置
	4. 在两个环境⽂件中配置独有信息

	#多配置⼀段
	config:
		env: test
	#多配置⼀段
	config:
		env: dev
 测试方法:
		@RestController
		@RefreshScope
		public class NacosConfigController {
 			@Value("${config.env}")
 			private String env;
 			//3 同⼀微服务的不同环境下共享配置
 			@GetMapping("/nacos-config-test3")
		 public String nacosConfingTest3() {
 			return env;
           	 }
           }
(2)不同服务内配置共享:
	1. 在nacos中定义⼀个DataID为all-service.yaml的配置,⽤于所有微服务共享
	all-service.yaml配置:
		spring:
			datasource:
				driver-class-name: com.mysql.jdbc.Driver
            	url: jdbc:mysql:///shopserverTimezone=UTC
            	username: root
            	password: root
            cloud:
             	nacos:
             		discovery:
             			server-addr: 127.0.0.1:8848	
	2. 修改bootstrap.yaml
		spring:
            application:
           	 name: service-product
            cloud:
            	nacos:
            		config:
                        server-addr: 127.0.0.1:8848 #nacos中⼼地址
                        file-extension: yaml # 配置⽂件格式
                        shared-dataids: all-service.yaml # 配置要引⼊的配置
                        refreshable-dataids: all-service.yaml # 配置要实现动态配置刷新的配置
             profiles:
           	 	active: dev # 环境标识
5.配置共享的优先级:
	当nacos、服务本地同时出现相同属性时,优先级有⾼低之分:
			服务名-profile.yaml(当前配置环境)>服务名称.yaml>本地配置

总结:

本文详细介绍了 Spring Cloud 微服务架构中的核心组件,包括 Spring Cloud Netflix 组件(Eureka、Ribbon、Feign、Hystrix、Zuul)、Spring Cloud Alibaba 组件(Nacos、Sentinel)以及 Spring Cloud 原生及其他组件(Consul、Config、Gateway、Sleuth/Zipkin)。重点阐述了服务调用中 RestTemplate 的作用和使用方法,以及注册中心的主要作用和常见的注册中心(Zookeeper、Eureka、Consul、Nacos),并对 Nacos 进行了深入介绍,包括其搭建、作用以及在配置管理方面的实战应用,如配置热更新、配置共享及配置共享的优先级等。

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

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

相关文章

【python】JS逆向中,手把手教会你如何层层突破瑞数加密

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Python中matplotlib使用4

在matplotlib中&#xff0c;可以通过绘制“饼图”来展示各类别在总体中所占的比例。 1 绘制基本“饼图” 通过matplotlib中的pie()函数绘制饼图&#xff0c;代码如图1所示。 图1 绘制基本“饼图”的代码 从图1中可以看出&#xff0c;pie()函数的参数y即为要绘制的数据&#…

微服务的基本理解和使用

目录​​​​​​​ 一、微服务基础知识 1、系统架构的演变 &#xff08;1&#xff09;单体应用架构 &#xff08;2&#xff09;垂直应用架构 &#xff08;3&#xff09;分布式SOA架构 &#xff08;4&#xff09;微服务架构 &#xff08;5&#xff09;SOA与微服务的关系…

Qt 0821作业

一、思维导图

一种针对自然语言文本的提示策略

文章介绍了一种创新的提示策略&#xff0c;旨在利用大型语言模型从自然语言文本中提取业务流程相关信息&#xff0c;例如活动和参与者等&#xff0c;并建立它们之间的关系。通过这种方法&#xff0c;研究人员能够在无需大量数据的情况下实现高质量的信息提取&#xff0c;进而用…

Apache Commons-IO 库

Apache Commons-IO是Apache开源基金组织提供的一组有关IO&#xff08;Input/Output&#xff09;操作的小框架。这个库的主要目的是为了提高IO流的开发效率&#xff0c;减少在进行文件读写、目录遍历等操作时编写的样板代码量。通过使用Commons-IO库&#xff0c;开发者可以更加简…

为一个花店编写一个库存管理程序,花点库存的花用花的名称、颜色、单价和株的数量来表示。(可直接运行)

为一个花店编写一个库存管理程序&#xff0c;花点库存的花用花的名称、颜色、单价和株的数量来表示。 要求&#xff1a; &#xff08;1&#xff09;说明一个结构数组&#xff0c;存储库存的鲜花数据。 &#xff08;2&#xff09;编写一个函数input_data()&#xff0c;输入现…

【学习笔记】卫星网络(NTN)的窄带物联网(NB-IoT)研究 -- 3GPP TR 36.763(四)

目录 8. 后续研究方向的建议 8.1 来自RAN1的建议 8.1.1 针对NR NTN和IoT NTN的共同增强建议 8.1.2 Release-17时间框架内RAN1建议的总结 8.2 来自RAN2的建议 关于卫星网络&#xff08;NTN&#xff09;的窄带物联网&#xff08;NB-IoT&#xff09;/增强型机器类型通信&#…

【论文阅读33】Deep learning optoacoustic tomography with sparse data

Deep learning optoacoustic tomography with sparse data 论文题目:基于稀疏数据的深度学习光声断层扫描 论文链接:Deep learning optoacoustic tomography with sparse data | Nature Machine Intelligence 代码链接:GitHub - ndavoudi/sparse_artefact_unet 数据链接…

鸿蒙Harmony实战开发:Arkts构造函数

构造函数 类声明可以包含用于初始化对象状态的构造函数。 构造函数定义如下&#xff1a; constructor ([parameters]) {// ... } typescript 如果未定义构造函数&#xff0c;则会自动创建具有空参数列表的默认构造函数&#xff0c;例如&#xff1a; class Point {x: numbe…

CH动画制作软件Win/Mac软件安装下载(附安装包)

目录 一、软件概述 1.1 软件简介 1.2 系统要求 二、安装步骤 2.1 下载软件 2.2 安装准备 2.3 安装过程 三、使用教程 3.1 创建新项目 3.2 角色制作 3.3 动画制作 四、高级功能与技巧 4.1 实时渲染技术 4.2 编程支持 4.3 协作与集成 一、软件概述 1.1 软件简介 …

linux 进程D状态的解决思路

同时做了录屏放到B站了&#xff0c;伙伴们视频给个3连支持一下 linux 进程D状态解决思路 1. 问题描述 在Linux系统环境&#xff0c;进程在内核模式下等待I/O完成时通常会进入不间断睡眠状态&#xff0c;此时使用ps或top命令输出的进程显示为D状态。当然我们也可以使用sysrq工具…

基于Python flask的图书借阅管理系统的设计与实现

基于Python Flask的图书借阅管理系统旨在为图书馆或类似机构提供一个高效、便捷的管理平台&#xff0c;覆盖图书借阅的各个环节&#xff0c;帮助管理员和读者更好地管理和使用图书资源。该系统采用Python编程语言和Flask框架进行开发&#xff0c;结合了数据库管理、用户认证、数…

数字图像处理【13】图像特征概述。

前言概述 打算用几篇文章回顾OpenCV特征模块&#xff08;features2d&#xff09;当中的对象检测&#xff08;object detection&#xff09;概念&#xff0c;以及主要的经典算法。这些传统的算法相对于现在来讲&#xff0c;可能有些过时&#xff0c;但对于初学者来说还是有必要…

netty编程之广播消息

写在前面 本文看下使用netty如何实现广播消息&#xff0c;主要依赖于类io.netty.channel.group.ChannelGroup。 1&#xff1a;正戏 首先定义server&#xff1a; package com.dahuyou.netty.broadcastmsg;import io.netty.bootstrap.ServerBootstrap; import io.netty.chann…

Midjourney中文版教程:参数详解

1.长宽比 可以设置图片的纵横比。按照需求可以选择不同的尺寸&#xff0c;也可以自定义。 注意&#xff1a;--ar必须使用整数。使用139&#xff1a;100代替1.39&#xff1a;1。 长宽比会影响生成图像的形状和构图。 在放大时&#xff0c;某些长宽比可能会稍微改变。 较旧的…

「字符串」详解AC自动机并实现对应的功能 / 手撕数据结构(C++)

前置知识 在此前&#xff0c;你应该首先了解trie树&#xff08;字典树&#xff09;的概念&#xff1a; 「字符串」详解Trie&#xff08;字典树|前缀树&#xff09;并实现对应的功能 / 手撕数据结构&#xff08;C&#xff09; 我们建议你先阅读这篇文章&#xff0c;以了解我们…

C语言-用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数中输出。

题目要求&#xff1a; 用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入&#xff0c;最后在主函数中输出。 程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int arr[100];int* pa…

王者壁纸下载站照片墙-(HTML+CSS)

效果图&#xff1a; 参考源代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>王者荣耀高清壁纸</title><style>#main{width:1366px;height:768px;margin-top:20px;}#main img{width:350px;}…

算法的学习笔记—从上往下打印二叉树(牛客JZ32)

&#x1f600;前言 在二叉树的遍历问题中&#xff0c;从上往下、从左到右打印出二叉树的每个节点值是一种常见的题目类型。这种遍历方式与广度优先搜索&#xff08;BFS&#xff09;密切相关&#xff0c;常常用于需要层次遍历&#xff08;Level-order Traversal&#xff09;的场…