Ribbon负载均衡
在Eureka的学习中,通过添加注解@LoadBalance进行负载均衡,实现的原理是什么?
请求端发送信息,LoadBalancerInterceptor负载均衡拦截器拦截请求,根据servername去注册中心获取请求地址,使用负载均衡选择调用哪一个。
负载均衡的策略设置
1.代码方式:在请求的启动类中(配置类应该也行)定义一个新的IRule:
@Bean
public IRule randomRule(){
return new RandomRule();
}
2.配置文件方式:在请求服务的配置文件中添加规则:
userservice:
ribbon:
NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule #负载均衡策略
饥饿加载
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:
ribbon:
eager-load:
enabled: true #开启饥饿加载
clients:
-userservice
微服务学习-Nacos
一.Nacos使用
1.在父工程添加依赖
<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>
2.注释掉原先使用eureka的依赖
3.添加nacos的客户段依赖
<!-- nacos客户端依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
4.添加配置
cloud:
nacos:
server-addr: localhost:8848
二.Nacos多级存储模型
1.Nacos服务分级存储模型
1.一级是服务,例如userservice。
2.二级是集群,例如北京集群。
3.三级是实例,例如北京部署了userservice的服务器
2.设置集群属性
修改配置文件,添加spring.cloud.nacos.discovery.cluster-name属性
3.根据集群负载均衡
1.修改请求段的配置文件,设置集群
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
2.设置负载均衡策略为NacosRule
userservice:
ribbon:
NFLoadBalancerRuleClassName:com.netflix.loadbalancer.NacosRule #负载均衡策略(优先访问本地,若本地没有则访问其他集群,从集群中随机挑选)
3.将userservice的权重设置为1
4.根据权重负载均衡
应用场景:减轻性能差的服务器的压力,平滑升级网站
5.环境隔离-namespace
修改配置文件,添加namespace
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 1 #命名空间的id
三.Nacos配置管理
1.统一配置管理
统一配置管理的配置文件并不是把服务的所有配置都放到这,而是把模式,开关等核心的会变化的配置放置在这。
如何在服务中使用Nacos配置管理
1)引入nacos-config依赖
首先,在user-service服务中,引入nacos-config的客户端依赖:
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2)添加bootstrap.yaml
然后,在user-service中添加一个bootstrap.yaml文件,内容如下:
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
作为文件id,来读取配置。
2.配置热更新
我们最终的目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新。
要实现配置热更新,可以使用两种方式:
1.2.1.方式一
在@Value注入的变量所在类上添加注解@RefreshScope:
1.2.2.方式二
使用@ConfigurationProperties注解代替@Value注解。
在user-service服务中,添加一个类,读取patterrn.dateformat属性:
package cn.itcast.user.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}
在UserController中使用这个类代替@Value:
通过Autowire注入,patternProperties.getdateformat获取。
多环境共享
其实微服务启动时,会去nacos读取多个配置文件,例如:
-
[spring.application.name]-[spring.profiles.active].yaml
,例如:userservice-dev.yaml -
[spring.application.name].yaml
,例如:userservice.yaml
而[spring.application.name].yaml
不包含环境,因此可以被多个环境共享。
下面我们通过案例来测试配置共享
1)添加一个环境共享配置
我们在nacos中添加一个userservice.yaml文件:
2)在user-service中读取共享配置
在user-service服务中,修改PatternProperties类,读取新添加的属性:
在user-service服务中,修改UserController,添加一个方法:
配置共享的优先级
服务名-profile.yaml > 服务名称.yaml > 本地配置
标签:spring,Nacos,nacos,学习,yaml,添加,Ribbon,userservice,cloud From: https://blog.csdn.net/weixin_44122034/article/details/137462423