zoukankan      html  css  js  c++  java
  • Spring Cloud Alibaba基础教程-Nacos(一)

    2019快结束,也有很久没写博客了,今天我们来谈谈Nacos,如果对您有帮助,麻烦左上角点个关注 ,谢谢 ! 嘻嘻 今天先写第一篇

    为什么要使用Nacos

    Eureka 闭源

    相信到现在,Eureka 2.0 闭源已经不是什么新鲜事了。在2017-2018年,几乎在国内掀起了一阵SpringCloud的热潮,几乎很大一部分人群随着对SpringBoot的关注,都开始关注起来了SpringCloud。而由于Eureka注册中心的易整合等优点,更是大多数使用SpringCloud的首选注册中心。但是随着Eureka官网的宣告,如下。

    在这里插入图片描述
    简单点说就是开源项目已经停止维护之类的话,这里就不做介绍了,感兴趣可以上Eureka的Github地址上查看 https://github.com/Netflix/eureka/wiki

    Nacos也是一个优秀的注册中心,并且由阿里巴巴开源,并且最近的热度很高,已经更新到1.14 版本了,基本上更新的很频繁,也是一个Eureka闭源后的好的选择。
    在这里插入图片描述
    从下面这张可以看出Nacos的优势
    在这里插入图片描述
    从配置中心角度来看,性能方面Nacos的读写性能最高,Apollo次之,Spring Cloud Config依赖Git场景不适合开
    放的大规模自动化运维API。功能方面Apollo最为完善,nacos具有Apollo大部分配置管理功能,而Spring Cloud
    Config不带运维管理界面,需要自行开发。Nacos的一大优势是整合了注册中心、配置中心功能,部署和操作相比
    Apollo都要直观简单,因此它简化了架构复杂度,并减轻运维及部署工作。
    综合来看,Nacos的特点和优势还是比较明显的,下面我们一起进入Nacos的世界。

    Nacos的优势

    什么是Nacos

    Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。

    官方介绍是这样的:

    Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。
    Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。

    官网地址: https://nacos.io/zh-cn/docs/what-is-nacos.html

    一张图看到Nacos优势
    在这里插入图片描述
    在这里插入图片描述
    包括虎牙在微服务改造方面 采用Nacos的好处
    文章地址 : https://nacos.io/en-us/blog/huya-practice.html
    全景图 :

    在这里插入图片描述

    架构及概念的理解

    在这里插入图片描述

    • 服务 (Service)

    服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务生态,如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service.

    • 服务注册中心 (Service Registry)

    服务注册中心,它是服务,其实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。

    • 服务元数据 (Service Metadata)

    服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据

    • 服务提供方 (Service Provider)

    是指提供可复用和可调用服务的应用方

    • 服务消费方 (Service Consumer)

    是指会发起对某个服务调用的应用方

    • 配置 (Configuration)

    在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。

    • 配置管理 (Configuration Management)

    在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。

    • 名字服务 (Naming Service)

    提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务,例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock Owner/Status Info, DNS Domain Name -> IP List, 服务发现和 DNS 就是名字服务的2大场景。

    • 配置服务 (Configuration Service)

    在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者

    总结一下优势

    相对于 Spring Cloud Eureka来说,Nacos 更强大。

    为什么呢 ?

    Nacos 相当于 一挑 2

    • 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 快速入门 - Quick Start

    1.1 安装Nacos Server

    1.1.1 预备环境准备

    Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在
    以下版本环境中安装使用:

    1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
    2. 64 bit JDK 1.8+;下载 & 配置。
    3. Maven 3.2.x+;下载 & 配置。

    1.1.2 下载源码或者安装包

    你可以通过源码和发行包两种方式来获取 Nacos。

    从 Github 上下载源码方式

    git clone https://github.com/alibaba/nacos.git
    cd nacos/
    mvn -Prelease‐nacos clean install -U
    ls -al distribution/target/
    // change the $version to your actual path
    cd distribution/target/nacos-server-$version/nacos/bin
    

    下载编译后压缩包方式

    您可以从 最新稳定版本 下载 nacos-server-$version.zip 包,本教程使用nacos-server-1.1.3版本。
    下载地址:https://github.com/alibaba/nacos/releases

    下载后解压:

    unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
      cd nacos/bin
    

    1.1.3启动服务器

    nacos的默认端口是8848,需要保证8848默认端口没有被其他进程占用。
    进入安装程序的bin目录:

    Linux/Unix/Mac

    启动命令(standalone代表着单机模式运行,非集群模式):

    sh startup.sh -m standalone

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

    bash startup.sh -m standalone

    Windows启动方式:

    启动命令:

    cmd startup.cmd

    或者双击startup.cmd运行文件。

    启动成功,可通过浏览器访问 http://127.0.0.1:8848/nacos ,打开如下nacos控制台登录页面:

    在这里插入图片描述

    使用默认用户名:nacos,默认密码:nacos 登录即可打开主页面。在这里插入图片描述

    1.1.4OPEN API 配置管理测试

    启动nacos成功后,可通过nacos提供的http api验证nacos服务运行是否正常。
    下边我们通过 curl工具来测试nacos的open api:
    curl 是开发中常用的命令行工具,可以用作HTTP协议测试。

    本教程下载curl的windows版本:curl-7.66.0_2-win64-mingw,下载地址:https://curl.haxx.se/windows/
    下载完成进入curl-7.66.0_2-win64-mingw的bin目录,进行下边的测试,通过测试可判断nacos是否正常工作:

    发布配置

    curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
    

    上边的命令表示向nacos发布一个配置:在这里插入图片描述
    点击详情
    在这里插入图片描述

    获取配置
    向nacos发布配置成功,就可以通过客户端从nacos获取配置信息,执行下边的命令:

    获取 :curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
    

    在这里插入图片描述

    通过测试发现,可以从nacos获取前边发布的配置:HelloWorld

    1.1.5 关闭服务器

    关闭nacos服务的方式如下:

    Linux/Unix/Mac方式:

    sh shutdown.sh
    

    Windows

    cmd shutdown.cmd
    

    或者双击shutdown.cmd运行文件。

    外部mysql数据库支持
    单机模式时nacos默认使用嵌入式数据库实现数据的存储,若想使用外部mysql存储nacos数据,需要进行以下步
    骤:

    • 1.安装数据库,版本要求:5.6.5+ ,mysql 8 以下 ,如果没有的话使用docker的数据库也行
    • 2.初始化mysql数据库,新建数据库nacos_config,数据库初始化文件:${nacoshome}/conf/nacosmysql.sql
    • 3.修改${nacoshome}/conf/application.properties文件,增加支持mysql数据源配置(目前只支持
      mysql),添加mysql数据源的url、用户名和密码。
    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://192.168.100.128:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=UTC
    db.user=root
    db.password=123456
    
    1.2 Nacos配置入门
    1.2.1 发布配置

    首先在nacos发布配置。

    浏览器访问 http://127.0.0.1:8848/nacos ,打开nacos控制台,并点击菜单配置管理->配置列表:

    在Nacos添加如下的配置:

    Data ID: spiritmark-nacos-demo.yaml
    Group : DEFAULT_GROUP
    配置格式: YAML
    配置内容:
     common:
    config1: some-spiritmark
    

    Note: 注意dataid是以 properties(默认的文件扩展名方式)为扩展名,这里使用yaml。

    像下面这样 ,复制过去的配置内容 可以按Tab键一下 因为是yaml格式 注意层级
    在这里插入图片描述

    发布配置
    在点击“发布”,如下图,点击确定发布成功。
    在这里插入图片描述
    查询配置

    在这里插入图片描述

    1.2.2 Nacos客户端获取配置

    我们需要新增一个名为spiritmark-nacos-demo的项目,坐标如下:

    
     <groupId>com.spiritmark.nacos</groupId>
        <artifactId>spiritmark-nacos-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    

    添加group ID 为 com.alibaba.nacos 和 artifact ID 为 nacos-clientstarter。用于实现项目中使用 Nacos 来
    实现应用的外部化配置。

            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>1.1.3</version>
            </dependency>
    
    

    (1)完整 pom坐标如下

    <?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>com.spiritmark.nacos</groupId>
        <artifactId>spiritmark-nacos-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    
    
        <dependencies>
    
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>1.1.3</version>
            </dependency>
    
        </dependencies>
    
    
    </project>
    
    

    (2)获取外部化配置

    新增java执行类,并在执行过程中获取配置信息:

    package com.spirimark.nacos;
    
    import com.alibaba.nacos.api.NacosFactory;
    import com.alibaba.nacos.api.config.ConfigService;
    import com.alibaba.nacos.api.exception.NacosException;
    
    import java.util.Properties;
    
    public class SimpleDemoMain {
        public static void main(String[] args) throws NacosException {
            //nacos 地址
            String serverAddr = "127.0.0.1:8848";
    //Data Id
            String dataId = "spiritmark-nacos-demo.yaml";
    //Group
            String group = "DEFAULT_GROUP";
            Properties properties = new Properties();
            properties.put("serverAddr", serverAddr);
            ConfigService configService = NacosFactory.createConfigService(properties);
    //获取配置,String dataId, String group, long timeoutMs
            String content = configService.getConfig(dataId, group, 5000);
            System.out.println(content);
    
        }
    }
    
    
     common:
        config1: some-spiritmark
    

    说明获取配置成功。

    下一篇 : Spring Cloud Alibaba基础教程-Nacos(二)

    好了 第一篇就先写到这 ,马上快过年了,争取在过年之前写完 ,这也是 2019年最后的目标的 2020,在接再厉 !

    在这里插入图片描述

  • 相关阅读:
    外观模式
    享元模式
    装饰模式
    适配器模式
    组合模式
    典型用户模板与场景
    知识圈APP开发记录(十二)
    知识圈APP开发记录(十一)
    知识圈APP开发记录(十)
    周总结(七)
  • 原文地址:https://www.cnblogs.com/spiritmark/p/13009929.html
Copyright © 2011-2022 走看看