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

微服务

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 进行了深入介绍,包括其搭建、作用以及在配置管理方面的实战应用,如配置热更新、配置共享及配置共享的优先级等。

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值