springcloud alibaba 组件

  • 一、nacos
  • Spring Cloud Nacos
  • 1. 什么是 Nacos?
  • 2. 下载地址:
  • 搭建一个springcloud alibaba 微服务
  • 使用nacos实现eureka-config的统一配置问题
  • nacos与eureke的比较


springCloud alibaba 地址 :

https://spring.io/projects/spring-cloud-alibaba

一、nacos

Spring Cloud Nacos

官网:https://nacos.io/zh-cn/index.html

1. 什么是 Nacos?

服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理

相当与springcloud netflix中的 eureka-server 注册中心

2. 下载地址:

https:///alibaba/nacos/releases

springcloud五大组件 start 配置_Cloud


我选择的是 nacos-server-1.3.1.zip 版本 安装是在 Windows

springcloud五大组件 start 配置_spring_02

下载解压后进入nacos文件夹,展示目录

springcloud五大组件 start 配置_Cloud_03

然后在bin目录下 输入cmd 进入管理员的doc命令

startup.cmd  -m standalone

springcloud五大组件 start 配置_Cloud_04

出现这个图案就启动成功了

输入地址 :

http://127.0.0.1:8848/nacos/index.html
默认账号密码都是nacos

登录成功后显示

springcloud五大组件 start 配置_spring_05


表示服务的注册中心就搭建成功了!!!!!

搭建一个springcloud alibaba 微服务

选择 版本 管理

<dependencyManagement>
        <dependencies>
            <!--spring boot 2.2.2-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud alibaba 2.1.0.RELEASE-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

 		</dependencies>
</dependencyManagement>

新建nacos-client 模块,选择maven工程
在nacos-client pom文件下 引入依赖

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

然后在进行建yml文件 如下图

springcloud五大组件 start 配置_Cloud_06


bootstrap.yml文件:

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # 注册中心
      config:
        server-addr: localhost:8848 # 配置中心
        file-extension: yaml # 这里指定的文件格式需要和nacos上新建的配置文件后缀相同,否则读不到

新建一个启动类

/**
 * @author fyb
 * @version 1.0
 * @date 2021/3/22 12:58
 */
@SpringBootApplication
@EnableDiscoveryClient  //这个就是将这个服务注册到nacos-server 中
public class NacosConfigClientMain3377 {

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

然后启动NacosConfigClientMain3377

在nacos服务端 查看:

springcloud五大组件 start 配置_Cloud_07


nacos-config-client就注册进我们的nacos-server服务端

使用nacos实现eureka-config的统一配置问题

导入依赖 :

springcloud五大组件 start 配置_Cloud_08


我在前面已经导入过了

然后在bootstarp.yml文件中

springcloud五大组件 start 配置_java_09


在配置文件中新建application.yml文件

spring:
  profiles:
    active: dev # 开发环境
#    active: test # 测试环境

然后写一个controller文件 进行测试

/**
 * @author 用户: fyb
 * @description class: ConfigClientController
 * @date 时间: 2021/2/23 21:23
 */
@RestController
@RefreshScope  //nacos 动态刷新 配置自动更新
public class ConfigClientController {

    @Value("${}")
    private String configInfo;

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

然后在重新运行
以前是在getee或者guthub,gitlab
现在是在nacos-server的服务端

springcloud五大组件 start 配置_java_10


springcloud五大组件 start 配置_java_11


这个Data ID官方是有要求的

springcloud五大组件 start 配置_Cloud_12


所以我这边是

#  ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

如图

springcloud五大组件 start 配置_java_13


填写数据

springcloud五大组件 start 配置_ci_14


点击发布后,访问接口

http://localhost:3377/config/info

springcloud五大组件 start 配置_spring_15


这个就可以实现自动同步数据

但是呢,只要重启了nacos-server端时,你会发现你写的配置文件的数据就不见了。
这个时候就涉及到持久层的问题
nocos就提供了一种方式 ,使用mysql来进行持久化,
在我们的conf目录下有多个文件

springcloud五大组件 start 配置_spring_16

打开nacos-mysql.sql

里面提供了表结构

springcloud五大组件 start 配置_java_17

在自己的mysql中新建一个数据库

然后在里面执行mysql就生成了如下图

springcloud五大组件 start 配置_ci_18

然后在conf文件夹下打开
application.properties

springcloud五大组件 start 配置_java_19


在这个文件里面填写自己mysql中的url 账号,密码

然后保存

再次 重启nacos 在配置管理 里面填写配置文件

写完后在MySQL数据库中config_info

springcloud五大组件 start 配置_java_20

看 如图 :

springcloud五大组件 start 配置_Cloud_21


然后再次重启nacos 配置管理 发现实现了 持久化 。

springcloud五大组件 start 配置_ci_22

nacos与eureke的比较

Spring Cloud Nacos

优点:

1)开箱即用,适用于dubbo,spring cloud等

2)AP模型,数据最终一致性

3)注册中心,配置中心二合一(二合一也不一定是优点),提供控制台管理

4)纯国产,各种有中文文档,久经双十一考验

缺点:

1)刚刚开源不久,社区热度不够,依然存在bug

Spring Cloud Eureka:
优点:

1)Spring Cloud 官方推荐

2)AP模型,数据最终一致性

3)开箱即用,具有控制台管理

缺点:

1)客户端注册服务上报所有信息,节点多的情况下,网络,服务端压力过大,且浪费内存

2)客户端更新服务信息通过简单的轮询机制,当服务数量巨大时,服务器压力过大。

3)集群伸缩性不强,服务端集群通过广播式的复制,增加服务器压力

4)Eureka2.0 闭源(Spring Cloud最新版本还是使用的1.X版本的Eureka)

示例地址:

https://gitee.com/fengyabin/springcloud_alibaba.git