Spring Cloud Alibaba实战入门之Nacos注册中心(一)

一、背景

越来越多的读者在和我交流关于Spring Cloud Alibaba的种种事宜,甚至于在一次面试中,一半时间都在聊这个话题。所以,本着对技术钻研的热情,对Spring Cloud Alibaba进行了一番研究。在这里,并不想高谈阔论,也不想预言未来,只是挑选了几个从阿里巴巴中间件团队内脱胎出来的开源组件,对于解决实际业务问题有所裨益。

现在,很明显的一个趋势就是:微服务。这个趋势的底层驱动力就来源于分布式系统的普及,而微服务的各个特性是如今大大小小的企业无法拒绝的诱惑。然后,用上了微服务的架构风格,用Spring Cloud,或者Dubbo搭了一套脚手架,就开始干起来了。

接下来,一众小公司画完了大饼之后,发现自己根本吃不下。这就是典型的落后劳动力与先进生产力的尖锐矛盾。这个时候,返璞归真的想法是不能有了,重构代价太大。

当然,哪里有问题,哪里就有商机。各大XX云厂商经过一系列包装之后,用“云原生(Cloud Native)”的新概念粉墨登场。Spring Cloud Alibaba就是其中之一。这个概念的一个核心价值就是:平滑上云,赋能运维。最明显的业务表象就是,会提供一套Open API,甚至是贴心的提供一个可视化控制台,傻瓜式的那种。

二、从NACOS说起

这是一颗耀眼的掌上明珠,迅速引起了我的注意。按照套路,分为两讲。其一讲述NACOS的功能特性,及其使用,再者就是更深入一步,看看大厂的攻城狮们写的代码。

本文所使用的版本是NACOS 1.0.0,由于此版本还是第一个NACOS正式版,NACOS正处在飞速发展阶段,本文的一些内容可能会不适用于以后的版本,请读者自行辨别。

NACOS解决两个核心问题:动态配置管理,服务注册发现。兼容性方面,除了支持自家的Dubbo,还对Spring Cloud,Kubernetes,Istio有所兼容。

简而言之,nacos与eureka的不同之处有三:后台老板、部署方式、功能。nacos是阿里的,eureka是奈飞的;nacos有自己的安装包,需要独立部署,eureka仅作为一个服务组件,引入jar包即可;nacos=eureka+config,它既是注册中心,也是配置中心。

对照以上的全景图,现在的NACOS还有一段距离,但是并不遥远。至此,不说道说道Eureka,都有点过意不去了。我用下来的体验是:NACOS完全可以替代Eureka了。江山代有才人出,这是必然的结果。在“云原生”的大背景之下,NACOS顺利成章的推出了Console,将触角进一步延伸至服务的精细化管理。当然,不排除Eureka也在憋大招。

再说说动态配置的特性。当然,NACOS略胜一筹,可替代Spring Cloud Config了。原先在Git/SVN上托管的配置项,都可以在Console上统一管理了。如果想先睹为快,可以接下着往下读。如果想再多了解一些,可以直接跳过这部分,阅读下一个小节。可以把NACOS理解成是一个中心化的服务,这在阿里系的架构中屡见不鲜。所以,必须得先启动这个服务。

有两个办法:其一是直接clone源码,使用maven打包。第二个办法是直接下载GitHub release出来的压缩包。推荐后者。

方法1:主要运行以下命令:

linux环境下:

git clone https://github.com/alibaba/nacos.git 
cd nacos/ 
mvn -Prelease-nacos clean install -U

经过一段时间的构建过程,在./distribution/target目录下有我们想要的压缩包。

方法2:进入https://github.com/alibaba/nacos/releases,找到压缩包,下载。为了演示,我们先用单机模式启动。

Spring Cloud Alibaba实战入门之Nacos注册中心(一)_第1张图片

Windows环境下:

在bin目录的地址栏输入cmd即可进入bin目录

Spring Cloud Alibaba实战入门之Nacos注册中心(一)_第2张图片

startup.cmd -m standalone

启动nacos需要正确配置java环境变量,启动后界面如下:

Spring Cloud Alibaba实战入门之Nacos注册中心(一)_第3张图片

一切就绪的话,访问http://127.0.0.1:8848/nacos/index.html,使用nacos/nacos登录。接下来,随便逛逛。

 三、重要的概念

为了避免在Console中迷失自我,有必要先阐述几个重要的概念。

这张图很重要。表述了namespace、group和service/dataId的包含关系。

NACOS给的最佳实践表明,最外层的namespace是可以用于区分部署环境的,比如test,uat,product等。同时,也有一个商业利用价值:多租户。以namespace为单位,给用户开辟使用空间。其它两个领域模型不用多解释了,见名知意。其目的也非常明显,就是为了能够逻辑上区分两个目标对象。

默认情况下,namespace=public,group=DEFAULT_GROUP。明白了这个数据模型后,可以稍微玩转一下Console了,比如新建若干个namespace:

namespace顺利创建成功后,会在每个一级页面看到由namespace组成的TAB,可以任意切换namespace,对其下的数据进行操作。比如下图的配置列表:

当然,还有众多的领域模型,但是跟这一讲的关系不大了,下一讲深入源码的时候再进行剖析。接下来会创建一个Demo工程,用于构建基于NACOS的config server和discovery server。在进行下一章节之前,强烈建议先创建一个Spring Boot样板工程,可以不做任何配置,不添加任何一段代码。

当然,为了让这一讲的内容更具实战意义,我不会照搬官网的Demo,本文所作的Demo工程也可以从GitHub上克隆得到。请提前准备好,接下来的内容只会挑重点讲解,侧重点不会在如何搭建工程。

四、使用NACOS代码实战体验

我们创建个项目来注册到这个nacos,配置如下;新加入的依赖包第一次没有的话下载需要一些时间,请耐心等待!



    4.0.0

    com.wlf    
    spring-cloud-alibaba-provider
    0.0.1-SNAPSHOT
    jar

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.7.RELEASE
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Greenwich.SR2
                pom
                import
            
            
                org.springframework.cloud
                spring-cloud-alibaba-dependencies
                0.9.0.RELEASE
                pom
                import
            
        
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
            org.projectlombok
            lombok
            true
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

配置文件如下:

Spring Cloud Alibaba实战入门之Nacos注册中心(一)_第4张图片

#端口
#server.port=8282
#应用名
spring.application.name=lxytrans-provider
#注册中心
spring.cloud.nacos.discovery.server-addr=localhost:8848

项目编译OK后启动main方法启动项目,进入nacos主页面找到【服务管理】-【服务列表】,可以看到我们的注册中心已经出现了一个注册过的服务,服务名就是我们配置文件里配置的项目名

Spring Cloud Alibaba实战入门之Nacos注册中心(一)_第5张图片

 我们的main方法还提供了几个RestApi接口,我们也可以试一下

package com.xu.nacos;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosApplication {

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


    @Slf4j
    @RestController
    static class TestController {

        @GetMapping("/hello")
        public String hello() {
            return "hello";
        }

        @GetMapping("/hey")
        public String hey() throws InterruptedException {
            Thread.sleep(2000);
            return "hey";
        }

    }
}

浏览器中输入地址 http://localhost:8080//hello 可以成功访问到

Spring Cloud Alibaba实战入门之Nacos注册中心(一)_第6张图片

这里nacos初步体验就到了这里,后续更多关于nacos技术实战应用我们再及时补充,谢谢观看 

你可能感兴趣的:(Spring,Cloud,Alibba实战入门)