搭建nacos服务端
下载nacos
-
nocas的github源码地址:https://github.com/alibaba/Nacos
-
nacos-server也是一个springboot项目,你可以把源码下载下来在运行也可以。
启动
-
nacos-server-2.0.3.zip windows用这个
-
nacos-server-2.0.3.tar.gz linux用这个
Linux解压 tar -xvf nacos-server-2.0.3.tar.gz
进入bin目录 cd nacos/bin
单机启动: sh startup.sh -m standalone
查看 logs下start.out 启动日志
启动成功后访问地址:Nacos
默认用户密码:nacos/nacos
注意:
需要开放 8848 9848 9849三个端口 。Nacos2.0增加了9848,9849端口来进行GRPC通信
Nacos 的服务注册和发现
- 新建父工程 依赖如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.8</version>
</parent>
<!-- 配置管理,主要是控制xml文件中的一些常量配置,比如版本号,maven版本 jdk版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<java.version>1.8</java.version>
<!-- Spring Cloud 2020.0.4 依赖 -->
<spring-cloud.version>2020.0.5</spring-cloud.version>
<!-- spring cloud alibaba 依赖 -->
<spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
</properties>
<!--
在父工程中定义的dependencies的依赖,只要是它的子模块,都自动继承下去
所以:这里的而依赖必须是非常通用的依赖,否则不要随意添加.
-->
<dependencies>
<!-- lombok 工具通过在代码编译时期动态的将注解替换为具体的代码,
IDEA 需要添加 lombok 插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--最新的alibabacloud在加载bootstrap.yml文件的会报错-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
<!--
项目依赖管理 父项目只是声明依赖,父工程不会去下载,只是管理
目的:是让子类在依赖的时候自动去下载的。
一句话:让子类达到一种按需选中依赖的一种机制
好处就是:不需要指定版本号。
-->
<dependencyManagement>
<dependencies>
<!-- spring cloud 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud alibaba 依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.新建一个用户服务依赖如下
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--最新的alibabacloud在加载bootstrap.yml文件的会报错-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
3.配置
为了保证项目启动的时候,配置先从nacos配置中心拉取,所有基础配置要写在 bootstrap.yml / bootstrap.properties文件中。bootstrap.yml比application.yml文件的优先级 更高如下:
server:
port: 8011
spring:
application:
name: xq_pug_user_server
cloud:
nacos:
discovery:
# 服务的注册与发现 默认是true
enabled: true
server-addr: 120.76.41.215:8848
# 暴露监控断点,给后续的Admin进行监控处理
# 获取单独访问http://localhost:8011/actuator
management:
endpoints:
web:
exposure:
include: '*'
启动类
package com.xq.pug;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class UserServerApplication {
public static void main(String[] args) {
SpringApplication.run(UserServerApplication.class);
}
}
4.启动用户服务,查看nacos服务端 用户服务已注册到nacos中
nacos数据持久化
把配置信息持久化到MYSQL数据库中
目的:安全,备份,和防止丢失
作用:可以为nacos集群高可用提供数据共享。
1.在nacos\conf下面找到 nacos-mysql.sql ,在数据库中新建nacos-config数据库 进行导入即可
2:在nacos\conf下面找到 application.properties ,进行数据库配置即可如下:
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=zmq99807
3.重启nacos服务
sh shutdown.sh
sh startup.sh -m standalone
4. 访问nacos管理端 测试新加一个配置,同步到数据库中 表示配置持久化成功
配置集群
单机版部署集群通过端口隔离
1.在每个nacos/conf目录下新建一个cluster.conf文件 交叉配置ip端口。如下
2.使用集群方式启动各个nacos节点
sh startup.sh
3.查看集群状态
Spring Cloud AlibabaNacos 的配置中心
1.在nacos管理端 打开配置管理在pulic下新建一个配置。此处的作用就是:把你想要的项目的配置信息放入到这个列表中进行配置管理。管理的过程你可以给你的配置项添加组,也可以去指定你格式。
2.填完配置内容后点击发布即可
Dataid的命名 - 默认规则(没有环境隔离的情况下)
Dataid主要是使用当前项目快速切换多套配置内容,先来看下Dataid的组成部分,以便更容易理解如下:
${prefix}-${spring.profiles.active}.${file-extension}
-
prefix 默认是:spring.application.name的值
-
注意1:我们可以通过:spring.cloud.nacos.config.prefix配置来覆盖默认规则。但是不建议了
-
注意2:当spring.profiles.active为空时,对应的连接符也将不存在,dataId的格式化就会变成
${prefix}.${file-extension}
-
我们可以通过:spring.cloud.nacos.config.file-extension配置项来配置。
服务中读取配置中心配置
1.依赖
<!--配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.配置
spring:
application:
name: xq_pug_user_server
cloud:
nacos:
discovery:
# 服务的注册与发现 默认是true
enabled: true
server-addr: 120.76.41.215:8848
config:
# 单机版本
server-addr: 120.76.41.215:8848
# 命名空间 默认是public,不用指定
#namespace:
# 如果你要修改,可以自己去指定dataid的名字
prefix: ${spring.application.name}
file-extension: yaml
# group 默认:DEFAULT_GROUP
group: DEFAULT_GROUP
3.使用
在使用配置信息的类上增加@RefreshScope注解可以实现实时刷新配置内容
package com.xq.pug.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
//声明@RefreshScope注解 这个类中使用nacos配置中心的配置可以实时刷新
@RefreshScope
public class UserController {
@Value("${user.name}")
private String userName;
@GetMapping("/getUserName")
public String getUserName(){
log.info(userName);
return userName;
}
}
测试接口发现读取配置成功
此时不重启服务,修改配置中心配置,测试服务内是否实时更新配置信息内容
dataid命名 — 环境隔离的方式 - spring.profiles.activve
1.新建dev和prod配置文件
2. 配置
spring:
application:
name: xq_pug_user_server
cloud:
nacos:
discovery:
# 服务的注册与发现 默认是true
enabled: true
server-addr: 120.76.41.215:8848
config:
# 单机版本
server-addr: 120.76.41.215:8848
# 命名空间 默认是public,不用指定
#namespace:
# 如果你要修改,可以自己去指定dataid的名字
prefix: ${spring.application.name}
file-extension: yaml
# group 默认:DEFAULT_GROUP
group: DEFAULT_GROUP
# 配置环境隔离
profiles:
active: prod
关于namespace、group和dataid的关系
namespace、group和dataid在前面都已经操作过了。其设计思想是:“分门别类”。namespace代表最粗的粒度划分,group是第二分类,dataid是最小的分类。
比如现在又很多的微服务,需要区分不同的企业团队的开发。就可以创建namespace来进行区分。比如这个企业团队开发的用户服务,比如用户注册,用户登录,可以划分到用户group 里。最后就是具体选择那个配置内容就是dataid啦。
不论是nacos的服务发现还是配置中心:只要做了隔离都需要进行配置和区分,否则找不到服务或者配置。
默认的命名空间
是public,在程序不需要指定。因为指定命名是通过命名空间ID 。所有如果是服务注册还是配置中心,如果是默认都不需要指定,也在namespace=publci下面去做分组的dataid.
增加命名空间
服务注册和配置中心都使用自定义的命名空间
配置中心
服务中心