7,springcloud+nacos

一、参考书籍

《Nacos架构&原理》

电子版下载地址:https://developer.aliyun.com/ebook/36

 

二、搭建nacos服务端

1,nacos官网下载

https://github.com/alibaba/nacos/releases

2,解压,修改配置文件,指定nacos连接的数据库配置

nacos/conf/application.properties

3,创建本地数据库,运行nacos初始化的sql

创建application.properties配置名称的数据库,运行nacos/conf/nacos-mysql.sql

4,运行nacos

先使用单机模式运行

cd nacos安装目录\nacos\bin

startup.cmd -m standalone

访问http://localhost:8848/nacos,查看运行效果

 

三、搭建nacos客户端

以springCloud + nacos为例

1,创建父工程

new project -> maven -> next ...  -> finish

删除src目录,只保留pom.xml

指定maven-settings.xml:settings -> 搜索maven,修改相关配置

settings.xml示例如下:
<?
xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>E:\frr_repository_nacosdemo</localRepository> <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> </settings> 父工程pom.xml示例如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>nacos-father</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <packaging>pom</packaging> <modules> <module>待会儿创建的子工程</module> </modules> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <spring-cloud.version>2021.0.2</spring-cloud.version> <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version> </properties> <dependencyManagement> <dependencies> <!--Spring Cloud 相关依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--Spring Cloud & Alibaba 相关依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>

2,创建子工程

右击父项目 -> new -> module -> spring initializr -> next ... -> finish

子工程pom.xml示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.example</groupId>
        <artifactId>nacos-father</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>nacos-son-one</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos-son-one</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </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>

        <!-- Spring Cloud & Alibaba -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

        <!-- 注册中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

3,创建nacos的namespace,在服务端页面

在nacos服务端页面配置的相关信息都是保存在数据库对应的表中。

4,客户端nacos配置

在src-main-resource下新建bootstrap.yml文件:
server:
  port: 8989

spring:
  application:
    # 应用名称
    name: nacos-son-one
  profiles:
    active: test
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848
        namespace: e6f53299-e336-4583-b1b6-d09675d70b49
        username: nacos
        password: nacos
      config:
        server-addr: http://localhost:8848
        namespace: e6f53299-e336-4583-b1b6-d09675d70b49
        username: nacos
        password: nacos
        file-extension: yml
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

其中,discovery是注册中心相关配置,config是配置中心相关配置

 

四、测试客户端获取服务端配置

按照约定,在服务端创建客户端对应的配置,一般为:应用名称-active.yml

客户端编写代码,测试获取这个配置

1,为何无法动态获取配置

修改服务端配置的值,客户端无法动态刷新获取

 

 

是因为这个controller的bean已经生成,后续没有动作去刷新这个值。

2,动态获取配置

2.1,使用spring的@RefreshScope

2.2,使用nacos的相关注解

由于按网上的说法,@NacosValue注解似乎不能用于cloud项目,此处使用springboot项目为例:

重新新建一个springboot项目

 

 

五、服务注册和发现

 关于nacos的openfeign工作原理:https://blog.csdn.net/qindalele/article/details/122444238

1,父工程下添加一个新模块

复制nacos-son-one,修改相关名字

2,消费者模块修改

 

 

六、集群

Nacos目录复制3份

每份都修改下端口;

配置下cluster.conf:

127.0.0.1:8845

127.0.0.1:8744

127.0.0.1:8847

每份bin目录下cmd启动

Nginx配置和启动

nacos客户端测试集群

两个模块都改成集群地址

测试关闭其中两个nacos后,也是可以正常获取配置的

posted @ 2022-10-27 15:45  seeAll  阅读(34)  评论(0编辑  收藏  举报