微服务学习-Ribbon,Nacos

本文探讨了Ribbon负载均衡的实现机制,包括注解负载均衡和配置策略,以及Nacos在服务发现中的使用,涉及懒加载、饥饿加载、多级存储模型、配置管理和多环境共享等内容。
摘要由CSDN通过智能技术生成

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 > 本地配置

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值