1、nacos 下载启动配置

1.1nacos下载

nacos 中文网站nacos 下载地址

可以选择稳定版本下载 例如当前的1.4.1 这里根据系统选择,下载编译后的nacos

本地nacosspringcloud项目启动不了不打印日志_spring boot


解压后进入bin目录

本地nacosspringcloud项目启动不了不打印日志_java_02

1.2启动nacos

startup.cmd启动文件,由于当前单机版启动 需要修改模式为单机 set MODE="standalone" 或者使用启动命令startup.cmd -m standalone Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

bash startup.sh -m standalone

本地nacosspringcloud项目启动不了不打印日志_后端_03


启动成功界面

本地nacosspringcloud项目启动不了不打印日志_spring boot_04


访问地址 本机地址:8848/nacos/index.html

账号密码 nacos nacos

本地nacosspringcloud项目启动不了不打印日志_spring_05

1.3配置nacos

nacos是有内嵌数据库的 由于不好维护 可以配置为mysql

本地nacosspringcloud项目启动不了不打印日志_后端_06


修改配置文件

nacos->conf->application.properties 打开注释

本地nacosspringcloud项目启动不了不打印日志_java_07


新建库 nacos

本地nacosspringcloud项目启动不了不打印日志_ci_08


然后导入sql

本地nacosspringcloud项目启动不了不打印日志_ci_09

本地nacosspringcloud项目启动不了不打印日志_spring boot_10

user表

本地nacosspringcloud项目启动不了不打印日志_后端_11


重新启动nacos

登录后可以修改密码

本地nacosspringcloud项目启动不了不打印日志_后端_12


本地nacosspringcloud项目启动不了不打印日志_spring boot_13


本地nacosspringcloud项目启动不了不打印日志_后端_14


修改用户名可以不用nacos 下次登录时可以用新的名字登录

本地nacosspringcloud项目启动不了不打印日志_ci_15

2、Nacos配置中心

2.1 版本说明

版本说明连接 alibaba 其实是个实现 spring 是个规范

本地nacosspringcloud项目启动不了不打印日志_spring_16

2.2 Hello World入门

新建maven父工程
然后加入依赖

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
        <springboot.version>2.3.2.RELEASE</springboot.version>
        <springcloudalibaba.version>2.2.5.RELEASE</springcloudalibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${springboot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${springcloudalibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

新建子模块 nacos-config-test
并引入依赖

<dependencies>
    <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-config</artifactId>
    </dependency>
</dependencies>

新建 application.yml 新建启动类 NacosConfigApplication

server:
  port: 8080
  servlet:
    context-path: /

bootstrap启动优先级比application高 新建bootstrap.properties配置文件。

新建nacosconfig 配置管理->配置列表->右侧+号

本地nacosspringcloud项目启动不了不打印日志_后端_17

写入bootstrap.properties配置

spring.application.name=nacos.config.test
spring.cloud.nacos.server-addr=127.0.0.1:8848
#默认组
spring.cloud.nacos.config.group=DEFAULT_GROUP
#data id nacos_config.properties
spring.cloud.nacos.config.name=nacos_config.properties

新建NacosConfigController 测试读取远程配置的参数 访问路径是否可以读参数

@Value("${java.name}")
private String name;
@Value("${java.age}")
private String age;
@GetMapping("/getConfigInfo")
public String getConfigInfo(){
    return name+age;
}

修改nacos配置参数

本地nacosspringcloud项目启动不了不打印日志_spring_18


例如age=20

访问接口返回参数是否更新 如果没更新在类上面加 @RefreshScope nacos也是个不错的配置中心 而且远程配置优先级大于本地配置文件参数优先级可以新建组 dataId相同不影响

本地nacosspringcloud项目启动不了不打印日志_后端_19


然后修改bootstrap.properties 配置文件

本地nacosspringcloud项目启动不了不打印日志_spring_20


重启访问地址 参数更新为新的组

2.3配置model

配置列表默认空间为public

本地nacosspringcloud项目启动不了不打印日志_spring_21

可以新增空间 然后在空间新建配置

本地nacosspringcloud项目启动不了不打印日志_java_22


本地nacosspringcloud项目启动不了不打印日志_spring_23


然后修改bootstrap配置

新增 id是粘空间id 然后修改组group、config 对应的名字

spring.cloud.nacos.config.namespace=0bc5b655-e3d3-4e65-8fce-8685ac245eb6 在进行测试读取配置;

这就是nacos配置数据模型

本地nacosspringcloud项目启动不了不打印日志_spring boot_24

Nacos 多配置集

有很多配置都是重复的比如 redis mysql等 假如有十个就需要配置十次吗?

可以进行分开配置使用例如 在dev下面创建多个配置 有mysql reids oa crm

本地nacosspringcloud项目启动不了不打印日志_spring_25


bootstrap.properties 修改配置读取 记得修改命名空间

#namespace dev 默认public命名空间
spring.cloud.nacos.config.namespace=0bc5b655-e3d3-4e65-8fce-8685ac245eb6

spring.cloud.nacos.config.extension-configs[0].data-id=mysql_common.properties
spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
#该参数表示是否开启自动更新
spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].data-id=redis_config.properties
spring.cloud.nacos.config.extension-configs[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.extension-configs[2].data-id=crm.properties
spring.cloud.nacos.config.extension-configs[2].group=CRM_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true

spring.cloud.nacos.config.extension-configs[3].data-id=oa.properties
spring.cloud.nacos.config.extension-configs[3].group=OA_GROUP
spring.cloud.nacos.config.extension-configs[3].refresh=true

测试

本地nacosspringcloud项目启动不了不打印日志_后端_26

@GetMapping("/getCommonInfo")
    public String getCommonInfo(){
        return redis+"::"+mysql+"::"+crm+"::"+oa;
    }

本地nacosspringcloud项目启动不了不打印日志_java_27

配置中心_其它配置

配置导出

本地nacosspringcloud项目启动不了不打印日志_java_28

配置导入

本地nacosspringcloud项目启动不了不打印日志_java_29

直接克隆配置到其它空降

本地nacosspringcloud项目启动不了不打印日志_spring boot_30

历史版本

本地nacosspringcloud项目启动不了不打印日志_后端_31

监听查询

本地nacosspringcloud项目启动不了不打印日志_spring boot_32

服务注册与发现

本地nacosspringcloud项目启动不了不打印日志_ci_33

服务注册

本地nacosspringcloud项目启动不了不打印日志_java_34


配置文件

server:
  port: 8081
spring:
  application:
    name: nacos-order
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

依赖

<dependencies>
        <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-config</artifactId>
        </dependency>
        <!--服务注册发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

启动类加@EnableDiscoveryClient注解 启用 Discovery

启动后检查

本地nacosspringcloud项目启动不了不打印日志_后端_35


服务调用 openfeign

stock 模块添加 StockController 添加方法 @RestController @RequestMapping路径 新增 test 方法

@RestController
@RequestMapping("/stock")
public class StockController {
    @RequestMapping("/test")
    public String test(String info){
        return "库存模块接收到信息"+info;
    }
}

然后 在order 进行导入 openfeign 依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

新建包feign 添加接口 StockFeignServic 添加方法调用 注意服务注册的名字 nacos-stock

@FeignClient("nacos-stock")
public interface StockFeignService {
    @RequestMapping("/stock/test")
    public String test(@RequestParam("info") String info);
}

创建OrderController

@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private StockFeignService stockFeignService;
    @RequestMapping("/test")
    public String test(){
        return stockFeignService.test("库存减减减");
    }
}

启动类添加注解 @EnableFeignClients(basePackages = “com.java.feign”) 扫描指定包

依次启动stock order 访问 order test方法地址 调用成功

本地nacosspringcloud项目启动不了不打印日志_spring boot_36

多实例负载

模拟多个节点

点击 Edit Configurations…

本地nacosspringcloud项目启动不了不打印日志_spring boot_37


复制启动console

本地nacosspringcloud项目启动不了不打印日志_ci_38


修改端口

本地nacosspringcloud项目启动不了不打印日志_spring boot_39

-Dserver.port=8084

新增代码

本地nacosspringcloud项目启动不了不打印日志_后端_40

stock 同理操作 然后将其四个service启动 查看nacos 服务列表

本地nacosspringcloud项目启动不了不打印日志_后端_41


访问时发现轮询

本地nacosspringcloud项目启动不了不打印日志_ci_42

本地nacosspringcloud项目启动不了不打印日志_ci_43


查询服务被订阅情况

本地nacosspringcloud项目启动不了不打印日志_ci_44

服务领域模型

nacos涉及了很多地方这上面也没有写完

本地nacosspringcloud项目启动不了不打印日志_spring boot_45


可以发现nacos服务列表也是有命名空间的

本地nacosspringcloud项目启动不了不打印日志_spring_46


模块里可以这样配置新增 namespace cluster-name

spring:
  application:
    name: nacos-order
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: 0bc5b655-e3d3-4e65-8fce-8685ac245eb6
        cluster-name: JAVA

本地nacosspringcloud项目启动不了不打印日志_spring_47

Nacos集群 高可用

每个技术都有高可用,高可用就是其中一个服务挂了可以 继续使用。由于会把nacos 用为配置中心 和注册中心比较重要,也需要高可用 。
一般最少需要三个节点,三个以上太奢侈,两个设计选举问题。所以这里使用三个。

实现 1、修改启动监本
2、准备三份nacos 端口为 8848、8849、8850
3、重命名cluster.conf.example为cluster.conf并修改地址和ip
4、修改程序连接地址和命名空间
5、启动程序测试

1、修改启动脚本

修改startup里面的启动模式为set MODE="cluster"

本地nacosspringcloud项目启动不了不打印日志_spring_48

2、修改conf配置文件application.properties

本地nacosspringcloud项目启动不了不打印日志_spring boot_49

3、将集群文件重命名为cluster.conf

本地nacosspringcloud项目启动不了不打印日志_后端_50


本地nacosspringcloud项目启动不了不打印日志_spring_51


编辑

本地nacosspringcloud项目启动不了不打印日志_spring boot_52

4、然后将nacos文件复制三份 并修改conf下的application.properties的port别三个文件的端口为 8850、8849、8848

5、程序里面配置

原来的nacos-config-test 模块修改bootstrap.properties

本地nacosspringcloud项目启动不了不打印日志_后端_53

6、测试

启动三个nacos 并访问其中一个端口地址查看情况 启动应用

访问地址

本地nacosspringcloud项目启动不了不打印日志_java_54


然后关掉一个测试没有问题 ,关掉两个也没有问题

本地nacosspringcloud项目启动不了不打印日志_ci_55