SpringCloud alibaba Nacos【服务配置中心】

x33g5p2x  于2022-02-07 转载在 Spring  
字(6.4k)|赞(0)|评价(0)|浏览(474)

前置内容
1、SpringCloud Alibaba简介和Nacos【注册中心】

1、Nacos(下)

1.1、服务配置中心演示

1.1.1、基础配置

1. 建Module

  • Module的名称为cloudalibaba-config-nacos-client3377

2. 改POM

<dependencies>
    <!--nacos-config-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <!--nacos-discovery-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!--web + actuator-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <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>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

3. 改YML

(1)、application.yaml

spring:
  profiles:
    active: dev

(2)、bootstrap.yaml

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
  • 配置bootstrap.yaml的原因:NacosSpringCloud-config一样,在项目初始化时候,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动,springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application

4. 主启动

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class,args);
    }
}

5. 业务类

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}
  • @RefreshScope实现动态刷新

6. 再Nacos添加配置信息

  • 配置信息中的DataId = ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
  1. prefix默认为spring.application.name的值
  2. spring.profile.active既为当前环境对应的profile,可以通过配置项spring.profile.active
  3. file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension配置

7. 测试结果

(1)、直接测试

(2)、修改version后测试

8. 最后的包结构

1.1.2、分类配置

(1)、面临的问题
  • 实际的开发环境下,一个大型的分布式服务系统会有很多微服务子项目,每个微服务项目会有相应的开发环境、测试环境、预发环境、正式环境。我们需要对这些微服务配置进行有效的管理。
(2)、图形化管理界面

(3)、Namespace、Group和DataId三者的关系

  • 三者的关系类似于Java里面的package和类名。
  • 最外层的namespace是可以用于区分部署环境的,GroupDataId逻辑上区分两个目标对象。
  • Namespace的命名空间是publicNamespace主要用来实现隔离。
  • Group默认是DEFAULT_GROUPGroup可以把不同的微服务划分到同一个分组里面去。
  • Service就是微服务,一个Service可以包含多个Cluster(集群),Nacos默认ClusterDEFAULTCluster是对指定微服务的一个虚拟划分。
  • 最后的Instance,就是微服务的实例。
(4)、DataId方案

1. 添加配置信息

2. 在上面案例前提下修改application.yaml

spring:
  profiles:
    active: test
  #active: dev

3. 测试结果

(5)、Group方案

1. 添加新的配置信息

2. 修改两个yaml文件

(1)、bootstrap.yaml

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: TEST_GROUP

# nacos-config-client-dev.yaml

(2)、application.yaml

spring:
  profiles:
    active: info
  #active: dev

3. 测试结果

(6)、Namespace方案

1. 添加新的配置信息

  • 配置内容
config:
    info: 0b13fe62-4a9c-4b8b-929a-168ff189a149,DEFAULT_GROUP,nacos-config-client-dev.yaml

2. 修改两个yaml文件

(1)、application.yaml

spring:
  profiles:
   # active: info
    active: dev

(2)、bootstrap.yaml

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: DEFAULT_GROUP
        namespace: 0b13fe62-4a9c-4b8b-929a-168ff189a149

3. 测试结果

(1)、Group为DEV_GROUP时

(2)、Group为DEFAULT_GROUP时

1.2、集群和持久化配置

1.2.1、简介

1. 官网架构图

访问地址

2. 对官网架构图的说明

  • 官网架构图中的VIP是虚拟IP的集群,也就是所谓的NGINX集群。

1.2.2、持久化配置解释

  • 每一个Nacos都有一个默认的数据库derby。但是如果我们搭建Nacos集群的话,那么这样会导致数据不一致的问题。所以我们需要将数据库从derby转换为MySQL

配置步骤

1. 找到如图所示目录的sql文件

  • 将其放置到我们对应的MySQL的数据库中执行。

2. 修改application.properties文件

  • 添加的内容
spring.datasource.platform=mysql
 
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
  • 到这一步那么就配置完成了。

1.2.3、Linux版Nacos + MySQL生产环境配置

(1)、配置前说明

下载地址

  • 预计需要,1nginx+3nacos注册中心+1mysql
  • 下载nacos-server-1.1.4.tar.gz解压并安装
(2)、配置步骤

1. Linux服务器上mysql数据库配置

nacos.mysql.sql文件在mysql上执行。

  • 执行后结果

2. 修改application.properties文件

  • 我们首先需要对application.properties.example拷贝一份重命名为application.properties。然后对application.properties进行修改。
spring.datasource.platform=mysql
 
db.num=1
db.url.0=jdbc:mysql://192.168.123.129:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

3. Linux服务器上nacos的集群配置cluster.conf

  • 我们首先需要对cluster.conf.example拷贝一份重命名为cluster.conf。然后对cluster.conf进行修改。
192.168.123.129: 3333
192.168.123.129: 4444
192.168.123.129: 5555
  • 这个IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP

4.编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端

while getopts ":m:f:s:" opt
do
    case $opt in
        m)
            MODE=$OPTARG;;
        f)
            FUNCTION_MODE=$OPTARG;;
        s)
            SERVER=$OPTARG;;
        p)
        	PORT=$OPTARG;;
        ?)
        echo "Unknown parameter"
        exit 1;;
    esac
done
# start
echo "$JAVA ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &
nohup $JAVA Dserver.port=${port} ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
echo "nacos is starting,you can check the ${BASE_DIR}/logs/start.out"

启动方式

./startup.sh -p 端口号

5.Nginx的配置,由它作为负载均衡器

  • 修改nginx.conf
upstream cluster{                                                        
 
    server 127.0.0.1:3333;
    server 127.0.0.1:4444;
    server 127.0.0.1:5555;
}

server{
                          
	listen 1111;
	 server_name localhost;
	 location /{
	      proxy_pass http://cluster;
	                                                     
	 }
}
# 启动nginx
./nginx -c /usr/local/nginx/conf/nginx.conf

6. 修改服务提供者的yaml文件及测试

server-addr:  写你自己的虚拟机ip:1111
  • 启动后

7. 小结

相关文章