简介
nacos简单来说就是一个服务注册和配置中心,我们可以像使用其它注册中心一样使用它,它也可以当作配置中心,可以实现SpringCloud Config和SpringCloud Bus 一样的功能,可以实现在线的项目信息配置。本文主要讲述其作为注册中心和配置中心的快速上手的用法。
使用
使用说明
本文是在windows环境下进行并使用的,读者也可以根据自己的需要在Linux下单独部署或者使用docker进行部署,不过docker下或者Linux下需要对其进行相应的修改,还要注意对应的端口安全组是否开放,集群版的话,数据存储配置是否正常,Linux内存是否够用,因为集群版会发生反复重启的现象,有兴趣的可以自己去研究一下。本文是单机windows下进行部署的,其实集群版也不是很复杂,不过存留的bug比较多,就不做了,因为环境不同,我这可能正常你那里可能就不行了。
下载并启动
由于官网说1.3.1比较稳定,我就下载了1.3.1版本的(Linux下我用的是0.9的)
这里我选择的是windows版的1.3.1.zip 读者可自行选择
然后下载完成以后,我们需要对其减压,然后进行配置信息的修改:
- 数据持久化
- 单机版集群版的选择
数据持久化
打开压缩包,然后进行到conf文件夹下,我们找到如图这两个文件:
如果想要数据持久保存,配置文件的信息下一次还想要使用的话,我们可以进行数据库配置,如果不想,请忽略数据持久化配置
在MySQL数据库中,根据nacos-mysql.sql 中信息,创建对应的数据库及表,然后进入到 application.properties 文件中进行数据库配置:
去掉对应的注释并添加数据库信息。
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://你的数据库连接信息:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456
单机版集群版的选择
进入到bin 文件夹下,找到startup.cmd 并进行编辑,单例默认不用修改,看一下就行,集群需要对截图红色部分进行对应的修改:
启动
双击 bin/startuo.cmd 文件进行启动。
访问
输入网址进行访问(账号密码都为nacos),如果你进行了对应的修改,请输入你修改后的文件
配置中心的用法
首先创建一个Springcloud项目 springcloud-nacos-config-demo,并引入依赖pom:
(由于有父pom来做版本管理,所以这里没有写版本,详情请在项目地址中查看)
<dependencies>
<!--SpringCloud Alibaba nacos 注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--常用的web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring boot 的健康检测-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
编写配置文件application.yml
server:
port: 3377
spring:
profiles:
active: devs
application:
name: springcloud-nacos-config-demo
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式配置
group: DEVS_GROUP
namespace: ba55d245-23bd-4244-ae2e-6392f30a2945
启动类加注解
@EnableDiscoveryClient
编写用例去获取在nacos中的配置:
@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class DemoController {
@Value("${myserver.name}")
private String name;
/**
* 获取 nacos 中的配置信息
* @return
*/
@GetMapping("getConfigInfo")
public String getConfigInfo(){
return name;
}
}
nacos编写配置文件
配置文件的映射关系
启动项目进行访问
可以看到已经获取到值了
服务注册
创建一个springboot项目 springcloud-nacos-client-a,并且导入pom:
<!--SpringCloud Alibaba nacos 注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--常用的web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring boot 的健康检测-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--热加载插件,可不加-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!--日志插件,可不加-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--test插件,可不加-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.4</version>
</dependency>
添加application.yml配置文件
server:
port: 7777
spring:
application:
name: springcloud-nacos-client-a
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置的Nacos地址(本机的写localhost:8848,服务器的写IP地址)
management:
endpoints:
web:
exposure:
include: '*'
启动类加注解
@EnableDiscoveryClient
添加服务调用ribbon 的配置
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced //ribbon 服务调用
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
编写测试用例
@RestController
public class UserController {
public static final String URL="http://springcloud-nacos-client-b";
@Value("${server.port}")
private String serverPort;
@Value("${spring.application.name}")
private String serverName;
@Autowired
RestTemplate restTemplate;
@GetMapping("/getServerInfo/{name}")
public String getServerInfo(@PathVariable("name")String name){
String result ="服务名:"+serverName+" 端口:"+serverPort+" 时间戳:"+ DateUtil.now()+"
";
if("a".equals(name)){
return result;
}else {
return result+ "实际请求地址:"+restTemplate.getForObject(URL+"/getServerInfo/"+name,String.class);
}
}
}
仿照 springcloud-nacos-client-a 创建springcloud-nacos-client-b ,并修改其对应的配置文件和端口号
启动nacos服务,springcloud-nacos-client-a 和springcloud-nacos-client-b
在nacos 的服务列表,我们可以看到我们注册的服务:
服务调用
a 调用 a
a 调用 b
b 调用 a
b 调用 b
项目地址
关于项目的地址,有兴趣的可以自行下载
git@gitee.com:anxc/study-demo-eureka.git
参考文档:
https://www.cnblogs.com/gchh/p/13724416.html
https://www.freesion.com/article/7939864046/
https://www.pianshen.com/article/25711907017/
https://www.pianshen.com/article/2236929088/
https://blog.csdn.net/qq_20667511/article/details/107378047