首先先下载,然后安装,
linux下的nacos启动是:
./startup.sh -m standalone
默认端口是8848
后台管理地址:ip:8848/nacos 账号密码:nacos
开始
首先我们在微服务的基础
创建父工程

<packaging>pom</packaging>
<!--统一管理jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.16</druid.version>
<mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
</properties>
<!--子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version -->
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud Hoxton.SR1-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring.boot.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
使用了 dependencyManagement 就更方便子项目的坐标依赖导入
创建一个子项目,直接选择普通的maven项目 :provider-8001
<dependencies>
<!--https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!--https://mvnrepository.com/artifact/org.projectlombok/lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--远程调用feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
服务注册
除了上面的坐标,还要添加服务发现的依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置文件application.yml
server:
port: 8001
spring:
application:
name: provider-8001
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #服务注册的地址
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring-cloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: sdfsfssfs
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.api.entity
启动类
@EnableDiscoveryClient 服务暴露的注解,必须要加,否则无效
此时启动就可以了,我们可以到后台看到服务。

-----------------------------------------------------------------------------------------------------------------------
配置中心
可在上面的基础上做配置中心
添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

特别要注意的这个Data Id;很重要
开始配置 :
新建一个文件:bootstrap.yml或者bootstrap.properties。都是可以的
spring:
application:
name: nacos-config-example #服务名称,必须要写的
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #nacos的服务地址,这里相当于指定了配置文件的地址。
prefix: springcloud
# 默认前缀为${spring.application.name},不写也是默认是服务名称。
file-extension: yaml
# 默认配置文件扩展名为properties
# namespace: public
# 默认名空间为public,注意,当我们在nacos添加了命名空间,在这里配置时,配置的是命名空间的id
# group: SAMPLE_NACOS
# 默认组为DEFAULT_GROUP4
# 这个data Id 要特别注意:
# 它由${prefix} - ${spring.profiles.active} . ${file-extension}
# 组成
# ${prefix}就是我们上面配置的前缀,默认是服务名称
# ${spring.profiles.active} 是开发环境,比如dev,test等
# ${file-extension} 就是我们上面配置的文件后缀 yaml
这样我们可以把一些配置写在nacos的配置文件上,就比较方便
总结:现有配置文件
项目里的配置文件以及内容
application.yml
spring:
profiles:
active: dev
指定环境
bootstrap.yml
spring:
application:
name: nacos-config-example
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
prefix: springcloud
# 默认前缀为${spring.application.name}
file-extension: yaml
# 默认配置文件扩展名为properties
# namespace: public
# 默认名空间为public
# group: SAMPLE_NACOS
# 默认组为DEFAULT_GROUP
上面两个文件我们合并成一个文件也是可以的。
远程的配置文件:nacos-config-example-dev.yaml
server:
port: 8001
spring:
application:
name: nacos-config-example
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring-cloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.api.entity
test:
name: te
后面我们就把配置信息放在这个远程的文件就可以了
那么,还有,就是如何动态的刷新配置呢?
在需要用到的配置文件里面的值的地方,我们在类上加注解
@RefreshScope 就可以了
上面我们还说了环境的问题,那么配置的时候该怎么配:在nacos管理界面里面配置
一般的话,我们是将他们放在同一个命名空间,同一个分组里,但是环境名称不一样。
比如:
nacos-config-example-dev.yaml
nacos-config-example-test.yaml
我们分别给这些文件设置不同的参数就达到了效果。
nacos-config-example:说了,手动配置了就是我们自己配置的,没有配置就是服务名称作为前缀。
我们知道nacos主要就是通过命名空间+分组+DataId来进行区分环境
但一般我们就使用相同的命名空间和分组
我们也可以使用测试,开发,生产环境都使用不同的命名空间达到区分。
坑:
就是当我们配置了bootstrap.yml文件后,此时假设我们还没有配置远程的文件。
此时启动项目,会看到以下两行打印信息:

其中就有原创文件的名称,同学们不要在偷懒的时候在这里复制文件名字复制错了,复制了第二行的,否则都会报错的
-------------------------------------------------------------------------------------------------------------------------
集群化配置以及持久化
查看nacos的源码我们知道,每个nacos都带着一个内嵌的数据库
所以我们的配置中心的文件才不会丢失,保存了
但是要做持久化我们需要将数据库切换成mysql,要集群配置还需要加入nginx
持久化配置
按照官网的要求:
1.安装数据库,版本要求:5.6.5+
2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
数据库名称是 nacos_config。
修改conf/application.properties:
在文件的末尾添加这么一段:
spring.datasource.platform=mysql #指明使用的是mysql存储
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
配置好后,我们打开nacos的管理后台,发现之前配置的配置文件都不在了,
此时我们在新建配置文件,在数据库查找,发现在数据库中存了一份
集群化配置
最少三台nacos及以上才能配置集群+nginx集群+mysql高可用
首先在linux和windows下的持久化配置都是一样的,都是建好数据库表和指定数据库表
nacos我们还要指定他们的端口号,不能重复。
然后如果安装好了nacos,那么我们要让他们之间建立关系
cluster.conf.example文件打开,配置他们的其他节点的ip和端口
注意:使用的是hostname 加端口的方式,使用127.0.0.1的方式可能报错
如:

如果是三台机器我们就配置三个,每个都是一样的配置。
当然实际情况中多台节点肯定是在不同的机房不同的服务器
配置好后,我们需要修改startup.sh

为什么要加这个p呢,原因是集群我们现在的端口不一样,但是在同一个服务器,所以为了区分
我们在启动的使用需要加参数 -p 端口号
我们需要加端口号就需要这个启动的命令支持这个参数,所以要进行修改。
为了生效,还要修改一个地方,文件的最下面:
原来的:

修改成:

就是加上了 -Dserver.port=${PORT}
启动的时候在bin目录下 ./startup.sh start -p 端口号
配置nginx:
upstream cluster{
#三台nacos的ip和地址
server 127.0.0.1:3333;
server 127.0.0.1:4444;
server 127.0.0.1:5555;
}
server{
listen 1111;
server_name localhost;
location /{
proxy_pass http://cluster;
}
....省略
上面配置nginx和nacos的关系,
那么我们的微服务注册到nacos的时候,就不是单个的写某个nacos的地址了
而是写nginx的地址和·端口,如上面 : nginx的所在ip:1111
本文介绍了如何使用Nacos作为注册中心和配置中心。首先,详细讲述了Nacos的安装和启动过程,包括Linux下的启动命令和默认端口。接着,通过创建微服务项目并添加依赖,展示了服务注册的步骤,以及配置文件的设置。在配置中心部分,讲解了如何添加远程配置文件,并实现动态刷新配置。文章还提到了环境配置的处理,以及在Nacos中管理不同环境的配置文件。最后,讨论了Nacos的集群配置和持久化,包括MySQL的配置、集群的搭建和Nginx的配置,以确保高可用性和数据持久化。
204

被折叠的 条评论
为什么被折叠?



