Nacos的作用此处就不做介绍了,看看下面这张图就知道它的作用有多大了吧,这篇文章来彻底学习一下Nacos。
Nacos官方Git地址:https://github.com/alibaba/nacos
Nacos官方文档地址:https://nacos.io/zh-cn/docs/
Nacos的下载安装就不介绍了,可以直接使用windows版……
当Nacos作为注册中心使用时,它需要如下依赖。
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-ribbonartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-hystrixartifactId>
dependency>
项目的application.properties配置文件如下
# 服务端口
server.port=8001
# 服务名
spring.application.name=service-edu
# nacos服务注册地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
项目启动类
@SpringBootApplication
@EnableDiscoveryClient // 注册nacos
@EnableFeignClients // 远程调用
@ComponentScan(basePackages = {"com.scorpios"})
public class EduApplication {
public static void main(String[] args) {
SpringApplication.run(EduApplication.class,args);
}
}
启动Nacos之后,访问http://localhost:8848/nacos,默认用户名和密码都为nacos
启动项目,可以看到服务已经注册到Nacos的服务列表中。
下面来简单介绍一下使用Feign
的远程服务调用,此处用两个微服务,service-edu
和service-vod
,在service-edu
中调用service-vod
。
首先在service-edu
的启动类上加上注解@EnableFeignClients
开启远程调用,再使用@FeignClient
注解进行远程过程调用,fallback
为服务熔断处理,即只要远程调用不同都会调用callback
中的对用方法。
//调用的服务名称
@FeignClient(name = "service-vod", fallback = VodFileDegradeFeignClient.class)
@Component
public interface VodClient {
//定义调用的方法路径
//根据视频id删除阿里云视频
@DeleteMapping("/eduVod/video/removeAlyVideo/{id}")
public CommonResponse removeAlyVideo(@PathVariable("id") String id);
//定义调用删除多个视频的方法
//删除多个阿里云视频的方法
@DeleteMapping("/eduVod/video/deleteBatch")
public CommonResponse deleteBatch(@RequestParam("videoIdList")
List<String> videoIdList);
}
callback服务熔断中各方法的实现类。
@Component
public class VodFileDegradeFeignClient implements VodClient {
//出错之后会执行
@Override
public CommonResponse removeAlyVideo(String id) {
return CommonResponse.error().message("删除视频出错了");
}
@Override
public CommonResponse deleteBatch(List<String> videoIdList) {
return CommonResponse.error().message("删除多个视频出错了");
}
}
Nacos作为注册中心使用,很简单,本文不做过多介绍。
当Nacos作为配置中心使用时,需要额外引入下面依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
在学习配置中心时,我们要了解项目中的两个配置文件:bootstrap.yml
和application.properties
。在SpringBoot项目中配置文件加载的是存在优先级顺序的,bootstrap
优先级高于application
。
下面说一下流程,当项目启动时,会先根据bootstrap.xml
的配置从Nacos配置中心中进行配置拉取,拉取配置之后,才能保证项目的正常启动。至于拉去配置中心中的哪个配置文件,这个是此部分的重点。
在启动项目之前,我们需要在Nacos配置中心添加两个配置,分别是service-edu-dev.yaml
和service-edu-test.yaml
,分别对应dev和test环境。
项目中的配置文件
# bootstrap.yaml配置文件
# 服务端口
server:
port: 8001
# 服务名
spring:
application:
name: service-edu
cloud:
nacos:
# nacos 服务注册地址
discovery:
server-addr: 127.0.0.1:8848
# nacos 服务配置地址
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
# application.properties配置文件
# 环境设置:dev、test、prod
spring.profiles.active=dev
启动service-edu项目,访问http://localhost:8001/config/info,会看到如下结果
当我们把spring.profiles.active设置为test时,再次启动项目,刷新刚刚的请求,结果如下:
那么SpringBoot项目启动,是如果读取Nacos配置中心的哪个配置文件的呢?我们可以先看一下官网的描述。
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
对于上面的描述,总结几句话,就是按下面的规则去Nacos配置中心去拿对应的配置文件,是不是一目了然。
此处还要介绍一下Nacos
配置中心中的另个两个属性,Namespace
和 Group
。
这两个属性的作用是啥呢?总结一句话就是起到隔离的作用。
比方说我们现在有三个环境:dev、test、prod
环境,我们就可以创建三个Namespace
,不同的Namespace
之间是隔离的,互不干扰。
不过如果我们不设置这两个值,Nacos
都会有默认值,Group
默认是DEFAULT_GROUP
,GROUP
可以把不同的微服务划分到同一个分组里面去;
Namespace
的默认值是public
,并且无法删除。
对于不同环境下的不同服务,怎么去Nacos
配置中心中去拿配置文件呢?
这就需要我们在bootstrap.yml
配置文件中,添加上具体的Namespace
和Group
。
新建一个Namespace
,然后再创建一个Group
这样可以理解吧,就是项目启动会根据Namespace
和group
,再去定位到需要拉去的配置文件即可。
关于Nacos
的持久化,Nacos
默认自带嵌入式数据库derby
,所以即使我们安装后直接启动,也是能把配置信息得到持久化的。
那如何将数据源切换到mysql呢?也很简单
第一步:
进入到nacos-server-1.1.4\nacos\conf\目录下找到nacos-mysql.sql文件,在mysql数据库中执行其脚本。
第二步:
进入到nacos-server-1.1.4\nacos\conf\目录下找到application.properties,在文件末尾追加如下数据库配置。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
看完再来看一下官网的描述,是不是简单到没朋友!
https://nacos.io/zh-cn/docs/deployment.html
关于Nacos集群配置,官网如下:
https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
下面来总结一下操作的步骤:
1、Linux
服务器上mysql
数据库配置
2、application.properties
配置
3、Linux
服务器上Nacos
的集群配置cluster.conf
注意:这个ip不能写127.0.0.1,必须是Linux命令下hostname -i 能够识别的ip
4、编辑Nacos的启动脚本startup.sh,使他能够接受不同的启动端口(☆☆☆☆)
5、Nginx的配置,由它作为负载均衡器
6、截止到此处,1个Nginx+3个Nacos注册中+1个mysql