Nacos集群搭建(上)

简介: Nacos集群搭建(上)

Nacos配置管理



官方Nacos集群图:

1690890694977-ea2493bc-4b6f-48da-ac35-8562dafd2a3d.png


其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。


在生产环境中,所有的微服务都需要被注册发现到注册中心去。 同时还需要读取配置, 所以都需要去找Nacos。


就像下图一样 :


1690891361563-f322ab6f-c917-412a-8b72-48fd4dd73f3c.png


统一配置管理


1690892615490-b2513656-07e5-4fea-9953-3ce7f959330e.png

1690892636298-f50eb3b2-ad6e-43b9-aebc-9613b923f6e6.png


1.新建配置


DataID: 就是配置开发环境 xxx.yaml


  1. 配置格式就是YAML
  2. 配置内容:


内容就是做热更新配置是需要变的那种开关类型的配置(有热更新需求的)。 而不是数据库等没有什么需要做的那种配置。


配置获取


Spring项目的启动顺序


  1. 项目启动
  2. 读取本地的配置文件yml
  3. 创建Spring容器
  4. 加载Bean
  5. ….

1690893452446-c39b13a6-9a4a-491b-add6-e912c6fa3664.png


在nacos的配置管理中,在步骤2之前 需要将nacos的配置文件和本地配置文件做一个合并, 然后再去做后续的动作。但是问题来了 。nacos的地址是在application.yml文件中的,那这样就无法先将nacos的配置加载之后再读取本地配置文件application.yml了。


所以就需要将nacos的地址放在本地配置文件读取之前来操作。 在Spring中, bootstrap.yml配置文件在本地配置文件之前被读取。


bootstrap.yml的优先级比Application高很多。


操作步骤


1.引入依赖


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

1.添加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,来读取配置。


本例中,就是去读取userservice-dev.yaml:


1690893503873-901618fb-4808-4e59-a58a-a197caf6bf51.png


1.读取nacos配置

在user-service中的UserController中添加业务逻辑,读取pattern.dateformat配置:


1690893552023-1f10abd1-452d-429a-a79a-2f9d7af87813.png


这里可以将@value注解换成@NacosValue


1.最后访问即可看到效果。

提示:


可能会出错。 出错的继续看看视频的弹幕提示吧


https://www.bilibili.com/video/BV1LQ4y127n4/?p=26&spm_id_from=pageDriver&vd_source=fbbe87e6ad798358722a945dd1377672


依赖错误是最熬人的。


配置热更新


方法一:@RefreshScope


在@Value注入的变量所在类上添加注解@RefreshScope:


1690894628536-8d8c5dc3-d058-471e-9802-4a243db0288a.png


方法二(推荐): 使用@ConfigurationProperties注解代替@Value注解


使用@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:

1690894691055-2d781dc7-9064-41c5-b444-7031b9a36545.png


通过@ConfigurationProperties注入可以实现自动刷新。


而通过@Value 注解注入, 需要结合 @RefreshScope来刷新。


配置共享


其实微服务启动时,会去nacos读取多个配置文件,例如:


  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  • [spring.application.name].yaml,例如:userservice.yaml


而[spring.application.name].yaml不包含环境,因此可以被多个环境共享。


下面通过heima的一个案例来试配置共享


1)添加一个环境共享配置

我们在nacos中添加一个userservice.yaml文件:

1690895544892-cc385f69-4b6e-40ab-a242-6ea4656f4ca4.png


2)在user-service中读取共享配置

在user-service服务中,修改PatternProperties类,读取新添加的属性:


1690895552669-64c2de4d-82fe-4981-81c0-5eb1cd5c9d1c.png


在user-service服务中,修改UserController,添加一个方法:


1690895569389-f555b391-1fd4-4478-acb5-48d683b8a2cf.png


3)运行两个UserApplication,使用不同的profile


修改UserApplication2这个启动项,改变其profile值:


1690895576977-16983ccf-9cf6-47cc-bd48-31f711cc2917.png

1690895582888-de8e1419-8353-453c-b5d0-f349a974f25b.png


这样,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。


启动UserApplication和UserApplication2


访问http://localhost:8081/user/prop,结果:


1690895594901-1a6edb41-0f81-441f-82f5-547acbab4535.png


访问http://localhost:8082/user/prop,结果:

1690895602908-5aec34f6-ed24-4ca5-8c56-d7143ed76155.png


可以看出来,不管是dev,还是test环境,都读取到了envSharedValue这个属性的值。


4)配置共享的优先级


当nacos、服务本地同时出现相同属性时,优先级有高低之分:


1690895615923-4fed6621-7aef-4232-a0ad-2c4928f93dbd.png


微服务会从nacos中读取的配置文件1690896089100-ec91f164-8bb3-4f79-97d5-c3a4e09ddc2f.png


搭建Nacos集群



spring:
  cloud:
    gateway:
      # 。。。
      globalcors: # 全局的跨域处理
        add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
        corsConfigurations:
          '[/**]':
            allowedOrigins: # 允许哪些网站的跨域请求 
              - "http://localhost:8090"
            allowedMethods: # 允许的跨域ajax的请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" # 允许在请求中携带的头信息
            allowCredentials: true # 是否允许携带cookie
            maxAge: 360000 # 这次跨域检测的有效期


目录
相关文章
|
6月前
|
存储 运维 监控
NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
【2月更文挑战第33天】NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
256 3
|
6月前
|
Java 数据库连接 Nacos
nacos常见问题之Nacos2.0.3集群模式启动报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
6月前
|
弹性计算 网络协议 IDE
Nacos报错问题之集群开启鉴权无法注册如何解决
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
|
6月前
|
Oracle 关系型数据库 Shell
Nacos部署问题之多节点集群报错如何解决
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
647 12
|
6月前
|
关系型数据库 MySQL 应用服务中间件
从零开始,掌握Nacos搭建的艺术(单点、集群、docker-compose)
从零开始,掌握Nacos搭建的艺术(单点、集群、docker-compose)
130 0
|
3月前
|
Kubernetes 关系型数据库 MySQL
k8s部署nacos集群
k8s部署nacos集群
|
3月前
|
应用服务中间件 Nacos 数据库
Nacos 1.2.1 集群搭建(三) Nginx 配置 集群
Nacos 1.2.1 集群搭建(三) Nginx 配置 集群
64 1
|
3月前
|
SQL 关系型数据库 MySQL
Nacos 1.2.1 集群搭建(二)MySQL、cluster 配置
Nacos 1.2.1 集群搭建(二)MySQL、cluster 配置
108 1
|
3月前
|
关系型数据库 MySQL Nacos
Nacos 1.2.1 集群搭建(一)环境准备
Nacos 1.2.1 集群搭建(一)环境准备
81 0
|
4月前
|
Nacos 数据中心 Docker
Docker 部署 Nacos 集群
Docker 部署 Nacos 集群
下一篇
无影云桌面