nacos安装搭建 + springcloud 整合 nacos
介绍
nacos
Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。它 = 注册中心 + 配置中心
环境安装
nacos
nacos是java开发的,,所以运行依赖java环境,所以我们先安装配置java环境。系统环境是linux
名称 | 版本 |
---|---|
linux系统 | Centos7.2 |
java环境 | jdk1.8.0 |
nacos | 1.4.0 |
jdk下载地址
https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html
进入下载页面往下滑,找到如下图,进行下载。
nacos下载
https://github.com/alibaba/nacos/releases
点击链接进入下一级页面,往下滑,找到如下图,点击下载。
java jdk 安装及环境配置
新建jdk安装的目录
进入目录
cd /usr/local/
创建目录
mkdir java
用上传工具,将下载好的jdk安装包,上传到新建的这个目录中。
进行安装
进入目录
cd java
查看目录中的文件名
ls
解压 tar 包
tar -xvf jdk-8u211-linux-x64.tar.gz
删除安装包
rm -rf jdk-8u211-linux-x64.tar.gz
查看目录中的文件名
ls
效果如下
进入解压后的jdk目录
cd jdk1.8.0_211
查看当前目录,要把当前目录复制一下,因为一会要配置环境变量
pwd
出现的目录
/usr/local/java/jdk1.8.0_211
效果如下
配置环境变量
编辑环境变量配置
vi /etc/profile
在最后面写入以下内容,JAVA_HOME 的值就是刚刚用 pwd 命令显示的当前目录的路径
JAVA_HOME=/usr/local/java/jdk1.8.0_211
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
效果如下:
保存退出编辑
:wq
使更改的配置立即生效
source /etc/profile
java -version
命令或javac -version
命令来查看 jdk 是否安装成功
效果如下
nacos 安装
解压安装
进入目录
cd /usr/local
创建一个nacos目录用来安装
mkdir nacos
查看目录
ls
效果如下
用工具把安装包上传到新建的nacos目录中,全路径是/usr/local/nacos
上传之后效果如下
解压安装包
tar -zxvf nacos-server-1.4.0.tar.gz
查看目录
ls
效果如下
进入配置目录
cd nacos/conf
查看目录列表
ls
效果如下
注意目录中的两个sql文件,用远程工具下载到本地,方便等下执行到数据库中。(也可以提前解压拿出来,再上传安装。)
如下图
等下配置需要数据库,所以我们先创建数据库,再进行配置、启动步骤。
创建mysql数据库
运行sql
效果如下
前面已经进入到conf目录中了(全路径是/usr/local/nacos/nacos/conf),下面接着配置nacos。
vi application.properties
修改下面部分内容
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
#启用认证
nacos.core.auth.enabled=true
效果如下
保存退出编辑
:wq
集群配置(可选)
复制文件并重命名
cp cluster.conf.example cluster.conf
效果如下
编辑文件
vi cluster.conf
删除原有的3个节点
添加自己准备配置的集群节点
效果如下
保存退出编辑
:wq
复制并重命名nacos,模拟集群搭建
cp -r nacos nacos-8846
cp -r nacos nacos-8847
cp -r nacos nacos-8848
效果如下
分别修改nacos-8846
、nacos-8847
、nacos-8848
的启动端口。下面拿nacos-8846
举例
cd nacos-8846/conf
vi application.properties
修改下面的值
server.port=8846
效果如下
启动
进入启动目录
cd /usr/local/nacos/nacos/bin
如下图
执行启动命令
./startup.sh start
操作命令如下
显示命令帮助./startup.sh
启动服务./startup.sh start
停止服务./startup.sh stop
查看服务运行状态./startup.sh status
重启服务./startup.sh restart
集群启动如上, 分别进入到/bin
目录下,执行启动命令即可
测试访问
浏览器输入地址http://192.168.0.209:8848/nacos
表示成功
使用默认得登录用户和密码
用户名:nacos
密码:nacos
如果是集群,登录后点击集群管理 - 节点列表,效果如下
框架整合
第一步,创建maven pom工程
下面这一步要注意,先要取消use default Workspace location,在后面输入上名字后,再选中。
如下
创建之后效果如下
删除掉src目录(这里不需要这个)
第二步,创建模块工程
选中springcloud-nacos-demo
工程,快捷键 Ctrl + N
效果如下
第三步,编辑springcloud-nacos-demo
pom.xml
如下所示
pom.xml加入内容如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cloud.nacos.demo</groupId>
<artifactId>springcloud-nacos-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>springcloud-nacos-demo</name>
<description>springcloud-nacos-demo</description>
<modules>
<module>springcloud-nacos</module>
</modules>
<properties>
<!--Package skip unit test -->
<skipTests>true</skipTests>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<boot.verson>2.2.8.RELEASE</boot.verson>
<cloud.verson>Hoxton.SR4</cloud.verson>
<alibaba.cloud.version>2.2.3.RELEASE</alibaba.cloud.version>
<alibaba.fastjson.version>1.2.68</alibaba.fastjson.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- alibaba cloud -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${boot.verson}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${cloud.verson}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- alibaba json tool -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${alibaba.fastjson.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.name}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimit>$</delimit>
</delimiters>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
第四步,创建springcloud-nacos
工程启动类
先创建启动类
效果如下
第五步,整合nacos注册中心
编辑springcloud-nacos
工程pom.xml文件
如下所示
内容如下
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud.nacos.demo</groupId>
<artifactId>springcloud-nacos-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springcloud-nacos</artifactId>
<name>springcloud-nacos</name>
<description>springcloud-nacos</description>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<start-class>com.nacos.demo.NacosDemoApp</start-class>
<parentdir>D:\EclipseWorkSpace\csdn-springcloud-nacos-dubbo-demo\springcloud-nacos-demo\springcloud-nacos</parentdir>
</properties>
<dependencies>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- cloud Registry -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<!-- 指定package生成的文件名为myApplication.jar -->
<finalName>${project.name}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>${start-class}</mainClass>
<layout>ZIP</layout>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
parentdir路径来源
选中springcloud-nacos
按组合快捷键Alt + Enter,效果如下
start-class
包路径来源
双击NacosDemoApp.java
文件,右键点击类名,如下图
编辑springcloud-nacos
工程启动类代码
内容如下
package com.nacos.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class NacosDemoApp {
public static void main(String[] args) {
try {
SpringApplication sa = new SpringApplication(NacosDemoApp.class);
sa.run(args);
// 必须try catch 不然启动失败不知道原因
} catch (Exception e) {
if (!(e.getStackTrace() != null && e.getStackTrace().length <= 16
&& "org.springframework.boot.devtools.restart.SilentExitExceptionHandler"
.equals(e.getStackTrace()[0].getClassName()))) {
e.printStackTrace();
}
}
}
}
效果如下
编辑yml配置文件
因为注册中心的问题,建议使用bootstrap.yml配置
新建一个bootstrap.yml文件,加入以下内容
spring:
profiles:
active: dev
效果如下
再创建一个bootstrap-dev.yml文件,加入以下内容
server:
port: 8001
spring:
application:
name: springcloud-nacos
cloud:
nacos:
discovery:
server-addr: 192.168.0.209:8846,192.168.0.209:8847,192.168.0.209:8848
效果如下
server-addr如果是单节点,写一个即可,多节点则如上以,
逗号分隔
启动服务
出现如下内容,则启动成功。
下面去nacos看看服务列表有没有启动的这个服务
有springcloud-nacos
这个服务, 说明一切流程正常走完.
nacos集群的话,更改访问端口,查看其他节点的nacos中是否同步,同步则为正常,如下图。
服务名称来自于springcloud-nacos
工程中yml配置的spring.application.name
如下图
第六步,整合nacos配置中心
编辑springcloud-nacos
模块下的pom.xml
文件
加入以下内容
<!-- cloud Configuration center -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
效果如下
编辑配置中心配置,修改bootstrap-dev.yml
文件
加入以下内容
spring:
cloud:
nacos:
config:
server-addr: 192.168.0.209:8846,192.168.0.209:8847,192.168.0.209:8848
file-extension: yaml #Specify the configuration in yaml format
效果如下
新建一个controller
用来测试配置中心效果
TestNacosConfigController.java
代码如下
package com.nacos.demo.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@RefreshScope
@Controller
public class TestNacosConfigController {
@Value("${test-nacos-config:null}")
private String testNacosConfig;
@GetMapping("/nacos/config")
@ResponseBody
public String getNacosConfig() {
return testNacosConfig;
}
}
效果如下
启动或重启springcloud-nacos
服务
启动前,先增加一个启动参数,这里演示eclipse配置
参数如下
-Dfile.encoding=utf-8
加在虚拟机启动参数里,步骤如下
我这里是停止状态,演示启动
如下表示启动成功
nacos配置文件命名规则
检查nacos注册中心,服务是否注册成功,参考上面整合nacos注册中心。
先了解nacos配置中心配置文件命名规则。
我们来到工程的yml配置文件中,其中注册中心配置下有一个prefix
属性,看一下描述。
如下
这里我们可以看到数据标识 = prefix + ${spring.active.profile}
+ ${spring.cloud.nacos.config.file-extension}
如下
如果在prefix
没有配置的情况下,默认使用的是spring.application.name
如下
我们在配置整合示例中,并没有配置prefix
这个属性。使用的默认值,也就是上图红框中的spring.application.name
值
这里我们可以得到配置中心配置文件的名称格式为
${spring.application.name}
+ ${spring.active.profile}
+-
+ ${spring.cloud.nacos.config.file-extension}
等于: springcloud-nacos-dev.yaml
nacos配置中心创建配置文件
下面开始编辑配置中心配置文件。
Data ID:
命名规则如上所述
Group:
我们整合示例中,没有配置这个,则使用的Default值,则是DEFAULT_GROUP
如果有需要,请自行配置。
配置格式:
与springcloud-nacos
工程中yml配置项spring.cloud.nacos.config.file-extension
一致,否则无法获取配置中心值
如下图
配置内容:
上面橙色框与下图属性一致,配置方式与springboot自动配置相似。
nacos配置项填写完成后,点击发布按钮
如下图
动态配置测试
浏览器访问controller接口地址
效果如下
我们改变一下nacos配置中心的值,再看看效果
示例中,只修改配置内容的值就行了。
如下图
我们刷新一下刚才浏览器访问的接口
效果如下
总结注意事项:
1、nacos安装配置过程中,数据库sql记得要执行
2、nacos安装配置时,数据库要配置正确
3、nacos如果要搭建集群,cluster.conf
里面的ip端口一定要配置正确
4、框架整合时,注意版本。
5、配置文件建议使用bootstrap
级别
6、注意spring.cloud.nacos.config.file-extension
名称与nacos中创建时的名称要一致
7、注意spring.application.name
为spring.cloud.nacos.config.prefix
的默认值
8、启动时注意一定要加-Dfile.encoding=utf-8
,否则配置文件中出现中文时,配置信息会同步失败。
9、注意工程的编码格式,示例中统一使用utf-8
其他
1、spring.cloud.nacos.discovery.namespace
和spring.cloud.nacos.config.namespace
对应nacos中的
2、spring.cloud.nacos.discovery.group
和spring.cloud.nacos.config.group
对应nacos中的
至此,springcloud nacos整合完成。
欢迎评论交流。