二、搭建springCloudAlibaba2021.1版本分布式微服务-Nacos搭建及服务注册和配置中心

发布时间:2022-07-08 20:32:55 作者:yexindonglai@163.com 阅读(2414)

nacos介绍

1、Nacos简介

Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos注册中心分为server与client,server采用Java编写,为client提供注册发现服务与配置服务。而client可以用多语言实现,client与微服务嵌套在一起,nacos提供sdk和openApi,如果没有sdk也可以根据openApi手动写服务注册与发现和配置拉取的逻辑

2、Nacos优势

常见的注册中心:

Eureka(原生,2.0遇到性能瓶颈,停止维护)
Zookeeper(支持,专业的独立产品。例如:dubbo)
Consul(原生,GO语言开发)
Nacos
相对于 Spring Cloud Eureka 来说,Nacos 更强大。

Nacos = Spring Cloud Eureka + Spring Cloud Config

Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。

通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。

通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

Nacos安装(注册中心-服务端,使用SaaS,软件即服务)

为了方便,这里直接使用 docker 安装

  1. docker run -d --name nacos -p 8848:8848 nacos/nacos-server:2.0.0

搭建nacos服务

在父项目上右击 > new > 新建 Module…

项目起名为 spring-cloud-alibaba-2021-user

pom.xml 文件内容如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>spring-cloud-alibaba-2021</artifactId>
  7. <groupId>org.example</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>spring-cloud-alibaba-2021-user</artifactId>
  12. <dependencies>
  13. <!-- springweb 启动依赖 -->
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-web</artifactId>
  17. </dependency>
  18. <!-- nacos 服务注册发现(客户端)依赖 -->
  19. <dependency>
  20. <groupId>com.alibaba.cloud</groupId>
  21. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  22. </dependency>
  23. <!-- nacos-config 配置中心依赖 -->
  24. <dependency>
  25. <groupId>com.alibaba.cloud</groupId>
  26. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  27. </dependency>
  28. <!--spring-cloud-dependencies 2020.0.0 版本不在默认加载bootstrap.yml 文件,如果需要加载bootstrap 文件需要手动添加依赖-->
  29. <dependency>
  30. <groupId>org.springframework.cloud</groupId>
  31. <artifactId>spring-cloud-starter-bootstrap</artifactId>
  32. </dependency>
  33. </dependencies>
  34. </project>

application.yml 内容如下

  1. server:
  2. port: 8089
  3. spring:
  4. # 后面的bean会覆盖前面相同名称的bean
  5. main:
  6. allow-bean-definition-overriding: true

bootstrap.yml 内容如下,bootstrap.yml 文件比 application.yml 先加载,主要用于存放一些不会改变的配置,application.yml 存放一些经常需要改动的配置;

  1. spring:
  2. application:
  3. name: user-demo
  4. profiles:
  5. active: yexindong_active
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: chn520.cn:8848 # 服务注册中心地址
  10. namespace: public # 注册到nacos的名称空间,默认为public
  11. config:
  12. prefix: yexindong_nacos_prefix
  13. file-extension: yaml # 指定yaml格式的配置, 必须要放到bootstrao.yml 才会生效,放到application下不会生效
  14. server-addr: chn520.cn:8848 #配置中心地址
  15. group: DEFAULT_GROUP

父项目的 pom.xml 文件加入modules

  1. <modules>
  2. <module>spring-cloud-alibaba-2021-user</module>
  3. </modules>

新建启动类 UserApp.java

  1. package com.alibaba.cloud;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  5. import org.springframework.cloud.openfeign.EnableFeignClients;
  6. @SpringBootApplication
  7. @EnableDiscoveryClient
  8. public class UserApp {
  9. public static void main(String[] args) {
  10. SpringApplication.run(UserApp.class, args);
  11. }
  12. }

新建controller层 UserController.java

  1. package com.alibaba.cloud.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.cloud.context.config.annotation.RefreshScope;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. @RestController
  8. @RefreshScope // 不重启即可刷新 nacos配置
  9. @RequestMapping("/user")
  10. public class UserController {
  11. @Value("${cache:default}")
  12. private String cache;
  13. /**
  14. * 获取注册中心的配置
  15. * @return
  16. */
  17. @RequestMapping("/getConfig")
  18. public String getConfig(){
  19. return "config:" + cache;
  20. }
  21. }

此时 项目结构如下

配置nacos

网页上打开nacos,进入 配置管理 > 配置列表 ,点击右边的 +

此时会打开新建配置的页面,

  • DataId 输入:yexindong_nacos_prefix-yexindong_active.yaml
  • 配置格式 选择: YAML
  • 配置内容 中输入:cache: 123456
  • 点击 右下角的 发布 按钮

发布成功后,就可以在列表中看到刚刚发布的配置

注册

启动 UserApp.java 中的main方法,然后在nacos的 服务管理 > 服务列表 中查看,发现服务已经注册上去了

配置功能

然后访问 地址: http://localhost:8089/getConfig ,获取配置成功

修改配置

接下来在nacos中修改配置,将 cache改为 789

然后再次访问 http://localhost:8089/getConfig,配置已经更新了

关键字SpringCloud