Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • SpringCloudAlibaba

    • Nacos

      • Nacos基础
        • 1.windows版安装
        • 2.服务注册
        • 3.集群属性
        • 4.环境隔离
        • 5.Eureka和Nacos区别
        • 6.Nacos配置管理
        • 7.Nacos热更新
        • 8.多环境共享
        • 9.Nacous集群
      • Nacos面试
    • Dubbo

    • Zookeeper

    • Sentinel

    • Seata

  • MQ消息队列

  • Nginx

  • Elasticsearch

  • Gateway

  • Xxl-job

  • Feign

  • Eureka

  • 中间件
  • SpringCloudAlibaba
  • Nacos
phan
2023-05-15
目录

Nacos基础

# Nacos基本使用

# 1.windows版安装

启动服务

.\startup.cmd -m standalone
1

输入网址访问,默认账户密码都是nacos

http://127.0.0.1:8848/nacos
1

# 2.服务注册

nacos的注册中心(服务端)由可执行程序直接开启,不需要创建一个新的启动类,配置时springboot的yml文件仅仅需要改客户端的所有微服务

  • 在父工程添加maven依赖
<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>
1
2
3
4
5
6
  • 注释掉order-service和user-service微服务中原有的eureka依赖。
  • 微服务中添加nacos客户端依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>    
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
1
2
3
4
  • 微服务添加yml配置文件
spring:
  cloud:
    nacos:
      server-addr: localhost:8848
1
2
3
4

# 3.集群属性

添加cluster-name属性

cloud:
  nacos:
    server-addr: localhost:8848
    discovery:
      cluster-name: HZ
1
2
3
4
5

nacos负载均衡规则,优先选择同一个集群的服务,本地没有则会跨集群访问。因此服务之间是可以跨集群调用的

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
1
2
3

权重负载均衡:通过编辑微服务实例的权重来控制被访问概率,用户请求的越高,权重设置为0则不会被访问。(可以进行不关闭服务的版本升级,依次把一个个待升级更新的服务设置为0)

image-20230301131920596

# 4.环境隔离

命名空间namespace,用来隔离不同环境(生产环境,测试环境),服务之间不能跨命名空间进行调用

image-20230301132349008

修改微服务的application.yml,添加namespace并输出对应空间的id

cloud:
  nacos:
    server-addr: localhost:8848
    discovery:
      cluster-name: HZ
      namespace: 6c95967a-3010-4b77-8333-48f1469f5a77
1
2
3
4
5
6

# 5.Eureka和Nacos区别

两者都支持服务注册和服务拉取,健康检测

Nacos的实例可以设置为临时实例和非临时实例,两者的健康检测方式不同:

  • 临时实例是通过微服务临时实例向Nacos服务端发送心跳监测,如果异常(比如服务关闭了)则注册中心会直接删除
  • 非临时实例是通过Nacos服务端向微服务非临时实例进行主动监测模式,异常不会被剔除

服务拉取上,Eureka每30秒消费者会进行一次拉取,如果期间存在修改,消费者是不知道的;而Nacos是通过消息推送模式,服务列表更新及时。

image-20230301140305165

# 6.Nacos配置管理

配置管理服务:当微服务的配置需要改动时,不需要停掉关闭所有微服务进行改动,而只需要配置管理服务实现热更新。ID命名要微服务唯一,格式:微服务名-环境命名空间.ymal

整个步骤:项目启动->bootstrap.yml(nacos地址)->读取nacos配置文件->读取本地配置文件application.yml->创建spring容器->加载bean

image-20230301141325558

  • 引入配置管理客户端依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
1
2
3
4
  • 在userservice的资源目录添加一个bootstrap.yml文件,它是引导文件,优先级高于application.yml,其中的参数对应配置中心的[application]-profiles[active].file-extension。最后可能需要重启
spring:
  application:
    name: userservice
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: localhost:8848
      config:
        file-extension: yaml
1
2
3
4
5
6
7
8
9
10

# 7.Nacos热更新

Nacos服务端更改配置中心的配置,无需关闭微服务,直接热更新到所有微服务上。

  • 方法1:在usercontroller上添加注解@RefreshScope,然后通过@Value(${})获取
  • 方法2:通过ConfigurationProperties注入,指定配置文件中前缀为prefix的所有属性绑定到类属性中。
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class Patternproperties {
    private String dateformat;
}
1
2
3
4
5
6

# 8.多环境共享

位于不同namespace命名空间环境的微服务,虽然配置中心的yaml在不同配置中心下可能不同,但是所有application.yaml都会共同进行加载。因此可以声明一个userservice.yaml里面管理共享变量。

image-20230301160503298

当远端多个配置文件以及本地application.yaml包含相同属性时,优先级如下:

userservice-dev.yaml>userservice.yaml>application.yaml

# 9.Nacous集群

Nacos集群配置:

  • conf->cluster.conf.example添加集群所有节点的ip和端口号
  • 修改application.properties
server.port=8847
spring.datasource.platform=mysql  //放开注释

db.num=1

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123
1
2
3
4
5
6
7
8
  • 集群启动
.\startup.cmd
1

配置Nginx:

upstream nacos-cluster {
    server 127.0.0.1:8845;
	server 127.0.0.1:8846;
	server 127.0.0.1:8847;
}
server {
    listen       80;
    server_name  localhost;
    location /nacos {
        proxy_pass http://nacos-cluster;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

微服务的bootstrap.yml文件的nacos服务端地址(填写nginx的地址和端口):

spring:
  cloud:
    nacos:
      server-addr: localhost:80 # Nacos地址
1
2
3
4
编辑 (opens new window)
#中间件#SpringCloudAlibaba
上次更新: 2023/12/15, 15:49:57
Nacos面试

Nacos面试→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式