Nacos的使用

一、nacos是什么?

Nacos是一个配置中心 也是一个服务注册与发现中心

为什么需要配置中心?

  1. 配置数据脱敏

  2. 防止出错,方便管理

  3. 在当微服务架构中,当实例越来越多,达到数十、数百时,去逐个修改每1个微服务的配置就会让人抓狂,而且很容易出错。这时我们就需要1个可以集中保存微服务配置的配置中心。

为什么需要服务注册与发现中心?

  1. 方便服务集中管理

  2. 各种服务相互调用可以通过服务名去调用

二、nacos版本说明

Spring Cloud Alibaba VersionSentinel VersionNacos VersionRocketMQ VersionDubbo VersionSeata Version
2.2.9.RELEASE1.8.52.1.04.9.4~1.5.2
2021.0.4.01.8.52.0.44.9.4~1.5.2
2.2.8.RELEASE1.8.42.1.04.9.3~1.5.1
2021.0.1.01.8.31.4.24.9.2~1.4.2
2.2.7.RELEASE1.8.12.0.34.6.12.7.131.3.0
2.2.6.RELEASE1.8.11.4.24.4.02.7.81.3.0
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE1.8.01.4.14.4.02.7.81.3.0
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE1.8.01.3.34.4.02.7.81.3.0
2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE1.7.11.2.14.4.02.7.61.2.0
2.2.0.RELEASE1.7.11.1.44.4.02.7.4.11.0.0
2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE1.7.01.1.44.4.02.7.30.9.0
2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE1.6.31.1.14.4.02.7.30.7.1

三、Springboot与Springcloud版本对应

官方对应关系:https://start.spring.io/actuator/info


"spring-cloud": {"Hoxton.SR12": "Spring Boot >=2.2.0.RELEASE and <2.4.0.M1","2020.0.6": "Spring Boot >=2.4.0.M1 and <2.6.0-M1","2021.0.0-M1": "Spring Boot >=2.6.0-M1 and <2.6.0-M3","2021.0.0-M3": "Spring Boot >=2.6.0-M3 and <2.6.0-RC1","2021.0.0-RC1": "Spring Boot >=2.6.0-RC1 and <2.6.1","2021.0.4": "Spring Boot >=2.6.1 and <3.0.0-M1","2022.0.0-M1": "Spring Boot >=3.0.0-M1 and <3.0.0-M2","2022.0.0-M2": "Spring Boot >=3.0.0-M2 and <3.0.0-M3","2022.0.0-M3": "Spring Boot >=3.0.0-M3 and <3.0.0-M4","2022.0.0-M4": "Spring Boot >=3.0.0-M4 and <3.0.0-M5","2022.0.0-M5": "Spring Boot >=3.0.0-M5 and <3.1.0-M1"},

四、nacos的下载与安装

Nacos下载地址 :https://github.com/alibaba/nacos/releases

Nacos安装:

  1. 解压安装包

  2. 打开配置文件(nacos安装目录 -> conf -> application.properties)

-修改数据源配置

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=root
db.password=123456

-修改端口号

\### Default web context path:
server.servlet.contextPath=/nacos
\### Default web server port:
server.port=8848
  1. 执行sql文件(nacos安装目录 -> conf ->nacos-mysql.sql)

  2. 通过修改nacos.core.auth.enabled为true,就可以开启nacos认证。开启后客户端必须配置username、password。

五、Nacos原理

用户端在nacos注册自身服务,并自动将nacos服务列表拉取到本地服务列表。同时通过心跳定时检测nacos服务列表,若列表有更新,则客户端自动拉取nacos服务列表到本地。客户端通过本地服务列表连接到相应服务。

5.1注册中心原理
在这里插入图片描述

5.2配置中心原理
在这里插入图片描述
先来了解SpringBoot/SpringCloud中几个关键类。

MapPropertySource:这个是spring中属性配置的数据源,所有的配置文件都要转成这样的形式。

RefreshEvent:发送该事件,可以类似调用RefreshEndpoint#refresh,也就是通知spring刷新配置文件。

EnvironmentChangeEvent:发送该事件,会通知环境已经发生变化。

ContextRefresher:刷新管理类。

NacosContextRefresher:nacos配置上下文管理类。

RefreshScope:该注解会把bean加入到’refresh’的scope中。

ClientWorker:nacos配置中心客户端,会定时http请求服务器。
在这里插入图片描述

1.在nacos上修改配置。

2.nacos客户端中ClientWorker会每隔10ms异步读取一次配置中心文件md5值。

3.和本地md5值比较,有变化的从服务器拉取。

4.将文件保存/缓存到本地。

5.通知NacosContextRefresher配置文件有变化。

6.NacosContextRefresher判断是否需要更新配置。

7.发送事件通知ContextRefresher去更新。

8.这里是更新配置的关键步骤。

9.准备一份before配置,然后通过构建新的Environment的方式拿到新的配置,接着比较变化,得到有变化的keys。

10.构建Environment时会去读取配置文件,文件优先读本地,如果本地没有通过Http请求服务商。

11.构建NacosPropertiesSource,并重新生成ConfigurationProperties对象。

12.通知RefreshScope去更新。

13.销毁scope='refresh’的bean。

14.通知bean容器去构建新的bean(懒加载)。

15.将属性(@Value注解)注入到新的bean。

六、Nacos的启动

5.1单机模式启动

在nacs安装目录下的bin目录中运行命令,默认是集群模式启动,单机模式启动需要指定模式。

Windows命令:startup.cmd -m standalone

Linux命令:sh startup.sh -m standalone

命令运行成功后直接访问:http://localhost:8848/nacos
默认账号密码都是:nacos

5.2集群模式启动

1.修改cluster.conf文件

进入nacos的conf目录(即配置目录),将配置文件cluster.conf.example重命名为cluster.conf。

然后进入cluster.conf文件,修改以下位置的ip地址(这里我用本机真实ip地址或者127.0.0.1,在后面均可正常启动,但还是推荐使用本机真实ip地址)

在这里插入图片描述

修改ip地址

2.修改application.properties文件

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=你的数据库用户名
db.password.0=你的数据库密码

3.复制nacos文件夹并修改配置文件

将前面配置好的nacos文件夹复制成三份,并分别命名为nacos1,nacos2,nacos3。

然后分别进入三个文件夹中的application.properties文件中进行修改,将端口号分别改为 8811、8812、8813

4.启动nacos

入nacos文件夹的bin目录中,在地址栏输入cmd进入命令行窗口。

在命令行窗口中输入命令:startup.cmd即可启动,启动成功如下图所示:

5.可以进行nginx反向代理实现负载均衡(可选项)

  • 下载nginx安装包
  • 进入conf目录,修改其中的nginx.conf文件,将以下配置复制到http{}内(注意:复制到http语句块的任意位置都可以,但一定要在http语句块以内,这里我粗心了导致检查了很久!)
upstream nacos-cluster {
    server 127.0.0.1:8811;
	server 127.0.0.1:8812;
	server 127.0.0.1:8813;
}
 
server {
    listen       80;
    server_name  localhost;
 
    location /nacos {
        proxy_pass http://nacos-cluster;
    }
}

6.测试

访问http://localhost/nacos即可,如果访问成功说明配置成功。

六、Nacos服务注册

6.1引入父工程依赖,这里定义了springCloudAlibaba依赖的版本号

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

6.2项目中引入nacos discovery依赖

<!--        nacos服务注册与发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

6.3编写项目bootstrap.properties文件

在bootstrap.properties文件中(后面实现nacos配置中心就可以放在配置中心上了),添加以下信息:

#nacos服务注册与发现
#服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#服务所在的命名空间id
spring.cloud.nacos.discovery.namespace=7b05dab7-7dc1-480a-a218-5832cb4e8d0e
#分组
spring.cloud.nacos.discovery.group=consume
#深圳
spring.cloud.nacos.discovery.cluster-name=SZ

6.4在springboot的启动类上添加注解,开启nacos

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
 * @Description: 启动类
 */
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumeApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumeApplication.class,args);
    }
}

6.5测试

测试通过:
在这里插入图片描述

七、Nacos配置中心

7.1引入父工程依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.1.1.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

7.2项目中引入nacos配置中心依赖

<!--nacos的配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

7.3编写项目bootstrap.properties文件

#nacos配置中心
spring.profiles.active=dev 
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=public
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.refreshable-dataids=true

7.4在springboot的启动类添加注解,开启nacos

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
 * @Description: 启动类
 */
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumeApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumeApplication.class,args);
    }
}

7.5在nacos页面编写配置文件

在这里插入图片描述

注意:consume-service-dev.properties是${spring.application.name}-环境标识.properties

7.6编写controller层,并测试

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashSet;
/**
 * @Description: 用户服务的Controller
 */
@RestController
@RequestMapping("/consume")
@Api(value = "用户服务的Controller",tags = "Consume",description = "用户服务API")
public class ConsumeController {

    @Value("${username}")
    private String userName;
    @ApiOperation("测试hello")
    @GetMapping(path = "/hello")
    public String hello(){
        System.out.println("!1");
        return userName;
    }
}

测试通过:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值