一、nacos的介绍
1、什么是nacos?
Nacos(na代表Naming,co代表Configuration,s为Service)是阿里巴巴一个开源的注册中心、配置中心组件
2、nacos的启动器
<!-- nacos注册中心启动器-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos配置中心启动器-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
spring-cloud-starter-alibaba-nacos-config
二、nacos的安装和启动
1、上传并解压
cd /usr/upload
tar -zxvf nacos-server-1.4.1.tar.gz -C /usr/local
2、启动和关闭
启动:
cd /usr/local/nacos/bin
./startup.sh -m standalone
关闭:
cd /usr/local/nacos/bin
./shutdown.sh
3、测试
浏览器访问:http://192.168.209.129:8848/nacos
默认用户名/密码为:nacos/nacos
三、nacos注册中心(服务的ip和端口)
1、服务提供者:nacos_provider
pom.xml
application.yml
启动类注解
@EnableDiscoveryClient//注册中心和发现其他服务
服务消费者:nacos_consumer
pom.xml
<dependency>
<groupId>com.bjpowernode</groupId>
<artifactId>springcloud_common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<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>
application.yml
server:
port: 80
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.81.130:8848
namespace: test
application:
name: nacos-consumer
启动类注解
@EnableDiscoveryClient//注册中心和发现其他服务
配置类
@Configuration
public class BeanConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
测试
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;//获取服务的实例的工具类
@RequestMapping("/getUserById/{id}")
public User getUserById(@PathVariable("id") Integer id){
//获取所有服务的名字
// List<String> serviceList = discoveryClient.getServices();
// for (String serviceName : serviceList) {
// System.out.println(serviceName);
// }
//getInstances获取服务的实例的集合
//getHost()获取地址
//getPort()获取端口号
ServiceInstance service = discoveryClient.getInstances("nacos-provider").get(0);
String url = "http://"+service.getHost()+":"+service.getPort()+"/provider/getUserById/"+id;
return restTemplate.getForObject(url,User.class);
}
}
四、配置中心(配置文件)
集中管理配置文件
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos注册中心启动器-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos配置中心启动器-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: 192.168.81.130:8848
prefix: nacos-config #可省略不写,默认为注册到nacos的服务名 前缀
file-extension: yaml #后缀
namespace: test #测试环境
group: TEST_GROUP #DEFAULT_GROUP默认分组
3、启动类注解
@SpringBootApplication
@EnableDiscoveryClient
4 在nacos中新建配置文件
Data Id:${spring.cloud.nacos.config.prefix}.${spring.cloud.nacos.config.file-extension}
5 实时更新最新配置
@RestController
@RefreshScope //重写获取对象
public class ConfigController {
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.type}")
private String type;
@RequestMapping("/config/info")
public String config(){
System.out.println(this);
String configInfo = driverClassName+"<br>"+url+"<br>"+username+"<br>"
+password+"<br>"+type;
return configInfo;
}
}
引入logback.xml查看日志
原理:通过nacos监控MD5来查看
分组隔离
服务隔离
consumer
provider
五、持久化
nacos有自带嵌入式数据库derby,如果搭建集群则每台nacos的配置文件都不一样,重启后配置文件消失
1)切换数据库
vim /usr/local/nacos/conf/application.properties
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.81.129:3306/nacos?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
2)建库建表
①新建nacos数据库
②初始化数据库
找到/usr/local/nacos/conf/nacos-mysql.sql并在Navicat执行
3)测试
①重启nacos
②上传配置文件,观察是否写到了mysql
六、nacos设置开机自启
添加开机自启动文件
vim /lib/systemd/system/nacos.service
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
2、修改nacos的startup.sh
vim /usr/local/nacos/bin/startup.sh
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/local/jdk1.8.0_191
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
#[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME
3、设置开启执行nacos.service
systemctl daemon-reload #重新加载服务配置
systemctl start nacos.service #启动nacos服务
systemctl status nacos.service #查看nacos服务的状态
systemctl enable nacos.service #设置为开机启动
systemctl stop nacos.service #关闭nacos服务