「微服务系列」Nacos注册中心

认识Nacos

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。


Nacos-server安装(略)

1、下载安装包

2、解压

3、修改端口

4、在bin目录下运行指令:startup.cmd -m standalone


Nacos服务管理

服务注册到Nacos

1、添加spring-cloud-alilbaba的管理依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

2、添加nacos的客户端依赖

<!-- nacos客户端依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3、application.yml文件,添加nacos地址

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos 服务端地址

Nacos服务分级存储模型

  • 一级是服务,例如userservice
  • 二级是集群,例如杭州或上海
  • 三级是实例,例如杭州机房的某台部署了userservice的服务器 

服务调用尽可能选择本地集群的服务,跨集群调用延迟较高;本地集群不可访问时,再去访问其它集群。

根据集群负载均衡

配置服务集群属性

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos 服务端地址
      discovery:
        cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州

设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 

NacosRule负载均衡策略:

  1. 优先选择同集群服务实例列表
  2. 本地集群找不到提供者,才去其它集群寻找,并且会报警告
  3. 确定了可用实例列表后,再采用随机负载均衡挑选实例 

根据权重负载均衡

实际部署中会出现这样的场景:

服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。

实例的权重控制:

  1. Nacos控制台可以设置实例的权重值,0~1之间;
  2. 同集群内的多个实例,权重越高被访问的频率越高;
  3. 权重设置为0则完全不会被访问。

在Nacos控制台可以设置实例的权重值,首先选中实例后面的编辑按钮:

环境隔离 - namespace

Nacos环境隔离:

  1. 每个namespace都有唯一id
  2. 服务设置namespace时要写id而不是名称
  3. 不同namespace下的服务互相不可见

1、在Nacos控制台可以创建namespace,用来隔离不同环境

 2、然后填写一个新的命名空间信息

3、修改应用的application.yml,添加namespace 

spring:
    datasource:
        url: jdbc:mysql://localhost:3306/heima?useSSL=false
        username: root
        password: 123
        driver-class-name: com.mysql.jdbc.Driver
    cloud:
        nacos:
            server-addr: localhost:8848
            discovery:
            cluster-name: SH # 上海
            namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

Nacos注册中心细节分析 

设置非临时实例

spring:
    cloud:
        nacos:
            discovery:
                ephemeral: false # 设置为非临时实例

Nacos与Eureka的对比

Nacos与eureka的共同点:

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测

Nacos与Eureka的区别:

  • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式 

Nacos配置中心

配置获取的步骤

 

将配置交给Nacos管理

步骤1:在Nacos中添加配置文件

步骤2:在微服务中引入nacos的config依赖

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

步骤3:在微服务中添加bootstrap.yml

在应用中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml。配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件。

spring:
    application:
        name: userservice # 服务名称
        profiles:
            active: dev #开发环境,这里是dev
            cloud:
                nacos:
                    server-addr: localhost:8848 # Nacos地址
                    config:
                        file-extension: yaml # 文件后缀名

配置自动刷新

Nacos中的配置文件变更后,微服务无需重启就可以感知。

注意事项:

  • 不是所有的配置都适合放到配置中心,维护起来比较麻烦
  • 建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置

实现方式一:在@Value注入的变量所在类上添加注解@RefreshScope

@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
    
    @Vaule("${pattern.dataformat}")
    private String dataformat;

    // ...
}

实现方式二:使用@ConfigurationProperties注解 

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

多环境/服务配置共享

微服务默认读取的配置文件:

① [服务名]-[spring.profile.active].yaml,默认配置

② [服务名].yaml,多环境共享

不同微服务共享的配置文件:

① 通过shared-configs指定

② 通过extension-configs指定

优先级: 环境配置 >服务名.yaml > extension-config > extension-configs > shared-configs > 本地配置

微服务启动时会从nacos读取多个配置文件:

  1. [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  2. [spring.application.name].yaml,例如:userservice.yaml 无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件

多种配置的优先级:

多服务共享配置

实现方式一:通过shared-configs指定

spring:
    application:
        name: userservice # 服务名称
    profiles:
        active: dev # 环境
    cloud:
        nacos:
            server-addr: localhost:8848 # Nacos地址
            config:
                file-extension: yaml # 文件后缀名
                shared-configs: # 多微服务间共享的配置列表
                    - dataId: common.yaml # 要共享的配置文件id

实现方式二:通过extension-configs指定

spring:
    application:
        name: userservice # 服务名称
    profiles:
        active: dev # 环境
    cloud:
        nacos:
            server-addr: localhost:8848 # Nacos地址
            config:
                file-extension: yaml # 文件后缀名
                extends-configs: # 多微服务间共享的配置列表
                    - dataId: common.yaml # 要共享的配置文件id

Nacos集群搭建

 

  1. 搭建MySQL集群并初始化数据库表
  2. 下载解压nacos
  3. 修改集群配置(节点信息)、数据库配置
  4. 分别启动多个nacos节点
  5. nginx反向代理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值