Nacos集群配置和数据持久化到Mysql

一、引言

Nacos的作用此处就不做介绍了,看看下面这张图就知道它的作用有多大了吧,这篇文章来彻底学习一下Nacos。
Nacos集群配置和数据持久化到Mysql_第1张图片
Nacos官方Git地址:https://github.com/alibaba/nacos

Nacos官方文档地址:https://nacos.io/zh-cn/docs/

Nacos的下载安装就不介绍了,可以直接使用windows版……

二、Nacos注册中心

当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集群配置和数据持久化到Mysql_第2张图片
启动项目,可以看到服务已经注册到Nacos的服务列表中。
Nacos集群配置和数据持久化到Mysql_第3张图片
下面来简单介绍一下使用Feign的远程服务调用,此处用两个微服务,service-eduservice-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配置中心

当Nacos作为配置中心使用时,需要额外引入下面依赖


<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>

在学习配置中心时,我们要了解项目中的两个配置文件:bootstrap.ymlapplication.properties。在SpringBoot项目中配置文件加载的是存在优先级顺序的,bootstrap优先级高于application

下面说一下流程,当项目启动时,会先根据bootstrap.xml的配置从Nacos配置中心中进行配置拉取,拉取配置之后,才能保证项目的正常启动。至于拉去配置中心中的哪个配置文件,这个是此部分的重点。

在启动项目之前,我们需要在Nacos配置中心添加两个配置,分别是service-edu-dev.yamlservice-edu-test.yaml,分别对应dev和test环境。
Nacos集群配置和数据持久化到Mysql_第4张图片
Nacos集群配置和数据持久化到Mysql_第5张图片
Nacos集群配置和数据持久化到Mysql_第6张图片
项目中的配置文件

# 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,会看到如下结果
Nacos集群配置和数据持久化到Mysql_第7张图片

当我们把spring.profiles.active设置为test时,再次启动项目,刷新刚刚的请求,结果如下:
Nacos集群配置和数据持久化到Mysql_第8张图片
那么SpringBoot项目启动,是如果读取Nacos配置中心的哪个配置文件的呢?我们可以先看一下官网的描述。

https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
Nacos集群配置和数据持久化到Mysql_第9张图片
对于上面的描述,总结几句话,就是按下面的规则去Nacos配置中心去拿对应的配置文件,是不是一目了然。

Nacos集群配置和数据持久化到Mysql_第10张图片
此处还要介绍一下Nacos配置中心中的另个两个属性,NamespaceGroup
这两个属性的作用是啥呢?总结一句话就是起到隔离的作用。

比方说我们现在有三个环境:dev、test、prod环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的,互不干扰。

不过如果我们不设置这两个值,Nacos都会有默认值,Group 默认是DEFAULT_GROUPGROUP可以把不同的微服务划分到同一个分组里面去;
Namespace的默认值是public,并且无法删除。

对于不同环境下的不同服务,怎么去Nacos配置中心中去拿配置文件呢?
这就需要我们在bootstrap.yml配置文件中,添加上具体的NamespaceGroup

新建一个Namespace,然后再创建一个Group

Nacos集群配置和数据持久化到Mysql_第11张图片
在bootstrap.yaml配置文件中添加如下属性
Nacos集群配置和数据持久化到Mysql_第12张图片

Nacos集群配置和数据持久化到Mysql_第13张图片
这样可以理解吧,就是项目启动会根据Namespacegroup,再去定位到需要拉去的配置文件即可。

四、Nacos持久化

关于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集群配置和数据持久化到Mysql_第14张图片

五、Nacos集群配置

关于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,使他能够接受不同的启动端口(☆☆☆☆)
Nacos集群配置和数据持久化到Mysql_第15张图片
5、Nginx的配置,由它作为负载均衡器
Nacos集群配置和数据持久化到Mysql_第16张图片
6、截止到此处,1个Nginx+3个Nacos注册中+1个mysql
Nacos集群配置和数据持久化到Mysql_第17张图片

你可能感兴趣的:(框架搭建)