Springcloud笔记
目录
1.Eureka注册中心
1.搭建Eureka#
1、创建项目,引入spring-cloud-starter-netflix-eureka-server依赖
<!-- eureka服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2、编写启动类,类上添加注解@EnableEurekaServer
//开启自动配置
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
3、创建application.yml配置文件,编写配置(配置eureka地址)
server:
port: 10086 #服务端口
spring:
application:
name: eurekaserver #eureka的服务名称
eureka:
client:
service-url: #eureka的地址信息
defaultZone: http://localhost:10086/eureka
2. 服务注册#
将我们的服务提供者user-service服务注册到EurekaServer步骤如下:
1、在user-service项目中导入spring-cloud-starter-netflix-eureka-client的依赖
<!-- eureka客户端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、在application.yml中配置eureka地址
spring:
application:
name: userservice #user服务的名称
eureka:
client:
service-url: #eureka的地址信息
defaultZone: http://localhost:10086/eureka
将我们的服务消费者order-service服务注册到EurekaServer步骤同上。
无论是提供者还是消费者,都引入eureka-client依赖,知道了eureka地址后,在配置文件中进行配置,都可以完成服务注册。
3. 服务发现#
服务拉取是基于服务名称来获取服务列表,然后在对服务列表进行负载均衡算法。
1、在order-service完成服务拉取
- 修改order-service中的url访问路径,用服务名代替ip,端口
String url = "http://userservice/user/"+order.getUserId();
2.在order-service的启动类中的RestTemplate添加负载均衡注解@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
2.Ribbon负载均衡
1.负载均衡原理#
1.负载均衡流程#
2.负载均衡原理#
2.负载均衡策略#
Ribbon负载均衡的接口是IRule,默认实现是ZoneAvoidanceRule,即根据Zone选择服务列表,然后轮询。
通过定义IRule的实现可以修改负载均衡规则,有两种方式:
- 代码方式,即在消费者order-service的主程序类中,定义一个新的IRule。(全局配置,对所有服务都有效)
/*
修改负载均衡规则为RandomRule
*/
@Bean
public IRule randomRule(){
return new RandomRule();
}
- 配置文件方式,在order-service的配置文件中,添加新的配置(这种方式只对向某个服务发送请求有效)
userservice: #服务提供者的名称
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则
3. 饥饿加载#
Ribbon默认采用懒加载,即第一次访问时才会创建RibbonLoadBalancerClient,请求时间会很长。
而饥饿加载则会在项目启动时就创建,减少第一次访问的时间,通过添加配置开启饥饿加载。
ribbon:
eager-load:
clients: #指定按饥饿加载的服务名称
-userservice
enabled: true #开启饥饿加载
3.Nacos注册中心
3.1 Nacos服务搭建#
3.1.1 Nacos概述#
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎度更高
3.1.2 Nacos安装#
1、下载安装包
- 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:
- GitHub主页:https://github.com/alibaba/nacos
- GitHub的Release下载页:https://github.com/alibaba/nacos/releases
2、解压( 解压到任意非中文目录下 )
3、端口配置
- Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。
- 如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:
4、启动
- 启动非常简单,进入bin目录,然后执行命令即可:windows命令:startup.cmd -m standalone
5、访问
- 在浏览器输入地址:http://127.0.0.1:8848/nacos即可
- 默认的账号和密码都是nacos
3.2 Nacos服务注册和发现#
1、引入Nacos依赖
- 在父工程中导入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
- 在每个服务模块中导入Nacos依赖(记得先将之前的Eureka客户端依赖注释掉)
<!-- Nacos客户端依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、在配置文件中,配置Nacos地址(记得先将之前的Eureka配置注释掉)
spring:
application:
name: orderservice #order服务的名称
cloud:
nacos:
server-addr: localhost:8848 #Nacos服务地址
3.3 Nacos服务分级存储模型#
Nacos将多个实例按照地域划分为集群,是为了防止出现服务跨集群调用问题。
服务调用尽可能选择本地集群的服务,跨集群调用延迟较高。
当本地集群不可访问时,再去调用其他集群。
1、Nacos服务分级存储模型
- 一级是服务,例如userservice服务,一个服务有多个实例(实例的端口不同)
- 二级是集群,例如上海集群或杭州集群
- 三级是实例,例如user-service01,user-service02,杭州机房的某台部署了userservice的服务器
2、配置实例的集群属性
- 修改application.yml配置文件,添加配置即可
spring:
application:
name: userservice #user服务的名称
cloud:
nacos:
server-addr: localhost:8848 #Nacos服务地址
discovery:
cluster-name: HZ #配置集群名称,HZ表示杭州
3.4 NacosRule负载均衡#
为了让服务消费者orderservice去调用userservice服务时优先调用本地集群的服务,所以需要给消费者也配置集群属性。
1、根据集群设置负载均衡规则:
- 修改orderservice的配置文件,设置集群属性
spring:
application:
name: orderservice #order服务的名称
cloud:
nacos:
server-addr: localhost:8848 #Nacos服务地址
discovery:
cluster-name: HZ #配置集群名称,HZ表示杭州
- 在orderservice的配置文件中设置负载均衡的Rule为NacosRule,这个规则:优先寻找与自己同集群的服务,然后在集群内做随机调用。
userservice: #服务提供者的名称
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则(根据集群设置)
2、根据权重设置负载均衡:
在实际部署中:服务器设备性能有差异,我们希望性能好的机器承担更多的用户请求。
Nacos提供了权重设置来控制访问频率,权重越大则访问频率越高。
对服务的实例进行权重设置:
- Nacos控制台可以设置实例的权重值,0~1之间
- 同集群内的多个实例,权重越高则被访问的频率越高
- 权重设置为0则完全不会被访问
3.5 Nacos环境隔离#
环境隔离-namespace
Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离。
1、环境隔离具体步骤:
- 在Nacos控制台可以创建namespace,用来隔离不同环境。
- 修改配置文件,添加命名空间配置
spring:
application:
name: orderservice #order服务的名称
cloud:
nacos:
server-addr: localhost:8848 #Nacos服务地址
discovery:
cluster-name: HZ #配置集群名称,HZ表示杭州
namespace: 7s1982drui2 #配置命名空间,填ID
注意:
- 每个namespace都有唯一的ID
- 不同namespace下的服务不可见(即不可调用)
3.6 Nacos和Eureka的对比#
1、Nacos和Eureka的共同点:
- 都支持服务注册和服务发现(拉取)
- 都支持服务提供者做心跳检测
2、Nacos和Eureka的区别
- Nacos支持服务端主动检测提供者的状态:临时实例采用发送心跳检测给服务端;非临时实例采用服务端主动检测模式
- 临时实例心跳不正常时会被剔除,而非临时实例不会。
- Nacos支持服务列表更新时的消息推送模式,即服务端向消费者主动推送消息,服务列表更新更及时。Eureka采用的是定时拉取,即消费者定时向服务端拉取服务列表信息。
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP模式。
4.Nacos配置管理
4.1 统一配置管理#
具体流程:
- 在Nacos中添加配置管理文件(配置中心),填写配置
-
- 配置文件ID:[服务名称]-[环境].yaml
- 分组,默认即可
- 微服务获取Nacos的配置管理文件中的信息(微服务拉取配置)
-
-
- 引入Nacos的配置管理客户端依赖
-
<!-- Nacos配置管理依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
-
-
- 在userservice中的resource目录下创建一个bootstrap.yml文件,这个文件是引导文件,优先级比application.yml高。
- 在bootstrap.yml中添加配置,需要配置nacos地址,以及服务名称、当前环境、文件后缀名,这些配置决定了程序启动时去Nacos读取哪个配置文件。(注意将之前在application.yml中的相同配置删除掉)
-
spring:
application:
name: userservice #服务名称
profiles:
active: dev #环境,开发环境
cloud:
nacos:
server-addr: localhost:8848 #nacos地址
config:
file-extension: yaml #文件后缀名
- 当我们更改了Nacos配置管理文件后,微服务可以实现热更新,即无需重启就能感知到。
可以通过两种方式实现:
-
-
- 通过@Value注解注入,然后结合@RefreshScope来刷新
- 通过@Configurationproperties("前缀名")注解,自动刷新
-
注意:不是所有的配置都适合放在配置中心,维护起来比较麻烦。所以将一些关键参数,需要运行时调整的参数放到Nacos配置中心,一般都是自定义配置。
- 多环境配置共享,为了使多个环境将来能够共享相同的配置,所以创建一个多环境共享的配置文件,供不同环境下的微服务共享使用。
-
-
- 在Nacos中添加配置管理文件,命名规则:[服务名].yaml
- 添加共享的配置即可
-
多种配置文件的优先级:[服务名]-[环境].yaml > [服务名].yaml > 本地配置application.yaml
微服务会从Nacos中读取的配置文件:
1、[服务名]-[环境].yaml 环境配置文件
2、[服务名].yaml 默认配置,即多环境共享配置文件
- Nacos集群搭建
-
-
- 搭建MySQL集群并初始化数据库
- 下载解压Nacos
- 修改集群配置(节点信息),数据库配置
- 分别启动多个Nacos节点
- nginx反向代理
-
作者:jvlearn
出处:https://www.cnblogs.com/jvlearn/p/16829879.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?