nacos_nacos 发音 - CSDN
精华内容
参与话题
  • 对目前主流的前端开发框架有一个基础性的学习 学会React和Vue中ArcGIS API for JavaScript的使用 学会主流前端框架下WebGIS系统的整体开发
  • Nacos 服务注册与配置中心

    千次阅读 2020-03-23 15:24:24
    Nacos 作为服务注册中心 官方文档:...基于Nacos的服务提供者 1.新建module cloudalibaba-provider-payment9001 2.pom.xml <!--父工程引入sprin...

    Nacos 作为服务注册中心

    官方文档:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html

    基于Nacos的服务提供者

    1.新建module cloudalibaba-provider-payment9001
    2.pom.xml

    <!--父工程引入spring cloud alibaba 2.1.0.RELEASE-->
    <dependency>
    	<groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    
    <!--本pom.xml引入nacos-->
    <dependencies>
    	<!--springcloud alibaba nacos-->
        <dependency>
        	<groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <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>
        <dependency>
        	<groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
        	<groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
        	<groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    1. application.yml
    server:
      port: 9001
    
    spring:
      application:
        name: nacos-payment-provider
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #配置Nacos地址
            
    management:
      endpoints:
        web:
          exposure:
            include: '*'  #监控
    

    4.主启动

    package com.atguigu.springcloud.alibaba;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    @SpringBootApplication
    @EnableDiscoveryClient
    public class PaymentMain9001 {
        public static void main(String[] args) {
            SpringApplication.run(PaymentMain9001.class,args);
        }
    }
    

    5.业务类

    package com.atguigu.springcloud.alibaba.controller;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    @RestController
    public class PaymentController {
        @Value("${server.port}")
        private String serverPort;
    
        @GetMapping("/payment/nacos/{id}")
        public String getPayment(@PathVariable("id") Integer id){
            return "nacos registry,serverPort: "+ serverPort+"\t id"+id;
        }
    }
    
    1. 测试
      启动Nacos,启动9001
      在这里插入图片描述
      在这里插入图片描述
      这样就表示9001注册进Nacos了,为了演示Nacos的负载均衡,参照9001新建9002,启动后微服务下有两个实例:
      在这里插入图片描述

    基于Nacos的服务消费者

    1.新建module cloudalibaba-consumer-nacos-order83
    2.pom.xml

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
        	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.atguigu.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
        	<version>${project.version}</version>
        </dependency>
        <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>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        	<optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        	<scope>test</scope>
    	</dependency>
    </dependencies>
    

    Nacos自带负载均衡:
    在这里插入图片描述
    3.application.yml

    server:
      port: 83
    
    spring:
      application:
        name: nacos-order-consumer
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
    
    #消费者将要去访问的微服务名称(成功注册进nacos的微服务提供者),在这配置了访问的服务,业务类就不用在定义常量了
    service-url:
      nacos-user-service: http://nacos-payment-provider
    

    4.主启动

    package com.atguigu.springcloud.alibaba;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    @SpringBootApplication
    @EnableDiscoveryClient
    public class OrderNacosMain83 {
        public static void main(String[] args) {
            SpringApplication.run(OrderNacosMain83.class,args);
        }
    }
    

    5.业务类

    //Nacos自带Ribbon,引入RestTemplate
    package com.atguigu.springcloud.alibaba.config;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    @Configuration
    public class ApplicationContextConfig {
        @Bean
        @LoadBalanced //RestTemplate结合Ribbon做负载均衡一定要加@LoadBalanced
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }
    
    package com.atguigu.springcloud.alibaba.controller;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    import javax.annotation.Resource;
    @RestController
    public class OrderNacosController {
        /*
        因为在yml中配置了service-url.nacos-user-service,
        这里不需要再定义要访问微服务名常量,而是通过boot直接读出来
         */
        @Value("${service-url.nacos-user-service}")
        private String serverURL;
    
        @Resource
        private RestTemplate restTemplate;
    
        @GetMapping("/consumer/payment/nacos/{id}")
        public String paymentInfo(@PathVariable("id") Long id){
            return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
        }
    }
    

    6.启动83 ,测试
    在这里插入图片描述
    现在服务提供者有两个,服务消费者有一个
    在这里插入图片描述
    多次刷新,9001、9002交替出现,这样消费者83访问服务提供者9001/9002,轮询负载OK。

    扩展:
    在这里插入图片描述
    Nacos 支持AP 和 CP模式的转换

    C是所有节点在同一时间看到的数据是一致的;而A的定义是所有的请求都会受到响应。

    何时选择使用何种模式?

    一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如SpringCloud和Dubbo服务,都适用与AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。

    如果需要在服务级别编辑或存储配置信息,那么CP是必须,K8S服务和DNS服务则适用于CP模式。CP模式下则支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不出存在,则会返回错误。

    用下面命令切换
    curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

    Nacos作为服务配置中心

    Nacos作为配置中心-基础配置 介绍

    1.新建module cloudalibaba-config-nacos-client3377
    2.pomx.ml

    <dependencies>
        <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>
        <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>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        	<optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        	<scope>test</scope>
    	</dependency>
    </dependencies>
    

    3.bootstrap.yml 和 application.yml

    Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置后,才能保证项目的正常启动。

    SpringCloud中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application

    #bootstrap.xml
    server:
      port: 3377
    
    spring:
      application:
        name: nacos-config-client
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #Nacos服务注册中心地址
          config:
            server-addr: localhost:8848 #Nacos作为配置中心地址
            file-extension: yml  #指定yaml格式的配置
    
    # ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file.extension}
    # nacos-config-client-dev.yml
    
    #application.yml
    spring:
      profiles:
        active: dev #开发环境
    

    4.主启动类

    package com.atguigu.springcloud.alibaba;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    @SpringBootApplication
    @EnableDiscoveryClient
    public class NacosConfigClientMain3377 {
        public static void main(String[] args) {
            SpringApplication.run(NacosConfigClientMain3377.class,args);
        }
    }
    

    5.业务类

    package com.atguigu.springcloud.alibaba.controller;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    @RestController
    @RefreshScope   //SpringCloud原生注解 支持Nacos的动态刷新功能
    public class ConfigClientController {
    
        @Value("${config.info}")
        private String configInfo;
    
        @GetMapping("/config/info")
        public String getConfigInfo(){
            return configInfo;
        }
    }
    

    6.在Nacos中添加配置信息

    理论:Nacos中的匹配规则
    Nacos中的dataid的组成格式及与SpringBoot配置文件中的匹配规则
    官网:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
    在这里插入图片描述
    实操
    配置新增
    在这里插入图片描述
    在这里插入图片描述
    Nacos界面配置对应:
    在这里插入图片描述
    7.测试
    启动前需要在Nacos客户端-配置管理-配置管理栏目下有对应的yml文件
    运行cloud-config-nacos-client3377的主启动类
    调用接口查看配置信息http://localhost:3377/config/info
    在这里插入图片描述
    8.自带动态刷新
    修改下Nacos中的yml文件,再次调用查看配置的接口,就会发现配置以及刷新
    在这里插入图片描述
    在这里插入图片描述
    问题1:
    实际开发中,通常一个系统会准备dev开发环境、test测试环境、prod生产环境,如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
    问题2:
    一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又会有相应的开发环境、测试环境、预发环境、正式环境…那怎么对这些微服务配置进行管理呢?

    Nacos作为配置中心-分类配置 介绍

    Nacos的图形化管理界面
    在这里插入图片描述
    在这里插入图片描述
    Namespace + Group + Data ID三者关系?为什么这么设计?
    是什么?
    类似Java中的package名和类名
    最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象
    三者情况
    在这里插入图片描述
    默认情况:
    Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT

    Nacos默认的命名空间是public,Namespace主要用来实现隔离
    比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。

    Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去

    Service就是微服务,一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分
    比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ)给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。

    最后是Instance,就是微服务的实例。

    三种方案加载配置

    1.DataID方案配置:指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置

    默认空间 + 默认分组 + 新建dev和test两个DataID
    在这里插入图片描述
    通过spring.profile.active属性就能进行多环境下配置文件的读取
    在这里插入图片描述
    访问测试成功,也是支持动态刷新的
    在这里插入图片描述
    2.Group方案:通过Group实现环境区分
    在这里插入图片描述
    在这里插入图片描述
    bootstrap 和 application配置修改
    在这里插入图片描述
    在这里插入图片描述
    测试:
    在这里插入图片描述
    3.Namespace方案:
    新建dev/test的Namespace
    在这里插入图片描述
    回到配置管理-配置列表查看
    在这里插入图片描述
    按照域名配置填写
    在这里插入图片描述
    bootstrap.yml
    在这里插入图片描述
    在这里插入图片描述
    测试:
    在这里插入图片描述

    展开全文
  • Nacos初探(1)-- 简介与启动

    万次阅读 2018-12-10 10:39:16
    一、Nacos简介  Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。  用过dubbo或者Spring cloud都应该知道注册中心(zookeeper , eureka等等),以及配置中心(spring cloud config...

    一、Nacos简介

        Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。

        用过dubbo或者Spring cloud都应该知道注册中心(zookeeper , eureka等等),以及配置中心(spring cloud config等等),Nacos是集成了注册中心和配置中心的功能,做到了二合一,最为关键的是,国产,完全是在中国这种最为复杂的业务场景及并发量(双十一)一步一步诞生的产品。

        Nacos gitHub : https://github.com/alibaba/nacos

        Nocos 文档 :https://nacos.io/zh-cn/docs/what-is-nacos.html

    二、Nacos启动

        Nacos启动有两种方式:

        1、GitHub下载已经发布的包:https://github.com/alibaba/nacos/releases  目前版本是0.6.0,下载启动包即可

        

        解压,进入bin目录,

        

        如果是windows启动,则cmd下面执行,startup.cmd即启动Nacos

        如果是Linux,则启动startup.sh即可

        注意:

            必须装有jdk1.8版本,我在window环境中JAVA_HOME为1.7版本,启动报错

        

     解决办法为,修改startup.cmd中JAVA环境地址即可,将默认JAVA_HOME修改到jdk1.8的目录下:

        

        再次启动即可。

        Nacos是一个Springboot的项目,所以,启动过程与Springboot一毛一样。

        2、本地debug的话,则需要下载Nacos源码

        git clone https://github.com/alibaba/nacos.git

        mvn clean install 之前,需要确保JAVA_HOME为1.8版本,否则报错。

        我的操作是现将项目导入IDEA中,导入时设置项目环境为jdk1.8版本,然后在maven project中 clean install

        

        如何找到启动类呢?

        有个比较笨的方法,startup.cmd中,已经说明打包好的Nacos  jar名称为nacos-server.jar ,在IDEA中全局搜索 nacos-server.jar

        在nacos-console模块下,这个模块也说明,启动Nacos,则就是启动了Nacos的控制台。

        

        则启动类为com.alibaba.nacos.Nacos

        

       本地debug学习,就不需要设置那么多JVM参数,可以直接debug起来即可。

      两种方式启动成功只有,默认端口8848,浏览器打开Nacos控制台:http://localhost:8848/nacos/index.html ,忽略我的版本 是0.5.0

     

        控制台界面还是非常清爽干净的,舒服了,关键是:中文

        下一章节,来分析下Nacos的服务注册。

     

    展开全文
  • Nacos(二):SpringCloud项目中接入Nacos作为注册中心

    万次阅读 多人点赞 2019-07-16 09:08:34
    通过上一篇文章:Nacos介绍 简单了解了Nacos的发展历程和现状,本文我们开始Nacos试水的第一步: 使用Nacos做注册中心 上周末(7.6)Nacos发布了V1.1.0版本,这次更新支持灰度配置、地址服务器模式、配置文件导入...

    前言

    通过上一篇文章:Nacos介绍 简单了解了Nacos的发展历程和现状,本文我们开始Nacos试水的第一步: 使用Nacos做注册中心

    上周末(7.6)Nacos发布了V1.1.0版本,这次更新支持灰度配置、地址服务器模式、配置文件导入导出等其他功能。感觉社区的老哥们都很高产呐…

    本文主要通过两个项目来完成演示:

    • nacos-provide:服务提供者
    • nacos-consumer:服务消费者

    将nacos-provide和nacos-consumer注册到Nacos-server,
    
    服务消费者nacos-consumer通过主动轮询获取他所订阅消费的服务信息列表
    
    nacos-consumer根据获取到的服务信息列表,进行服务调用。
    

    熟悉SpringCloud+Eureka的同学阅读完本文后可以无缝切换Nacos做注册中心

    我的环境

    • Windows10
    • JDK8
    • SpringCloud:Finchley.RELEASE
    • SpringBoot:2.0.4.RELEASE
    • spring-cloud-alibaba-dependencies:0.2.2.RELEASE
    • Nacos-server:1.0.1

    注:Nacos针对不同版本的SpingCloud提供不同的依赖,各个版本的对应关系请参考官方文档给出的说明:版本说明

    启动Nacos-server

    Nacos部分版本预览

    Nacos-server可以直接从github上下载安装包,当然你也可以拉取代码后自行打包

    本文我直接从官网下载Nacos-server:V1.0.1(为避免新版本V1.1.0有其他问题,我这里还是用V1.0.1)

    下载地址: https://github.com/alibaba/nacos/releases

    下载解压后进入bin文件夹(目录:nacos-server-1.0.1\nacos\bin),直接双击执行startup.cmd文件,启动成功如下图:

    Nacos单机模式启动成功

    启动成功后,此时Nacos控制台就可以访问了,浏览器访问:http://127.0.0.1:8848/nacos/index.html ,默认的账号密码为nacos/nacos,控制台页面如下:

    nacos控制台界面

    创建服务提供者

    IDEA中创建聚合工程Nacos作为父工程,其pom.xml如下(重点关注dependencyManagement配置):

    <?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">
        <parent>
            <artifactId>larscheng-learning-demo</artifactId>
            <groupId>com.study.www</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <version>0.0.1-SNAPSHOT</version>
        <modelVersion>4.0.0</modelVersion>
    
        <modules>
            <module>nacos-provide</module>
        </modules>
    
        <artifactId>Nacos</artifactId>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-boot.version>2.0.4.RELEASE</spring-boot.version>
            <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
            <nacos.version>0.2.2.RELEASE</nacos.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <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>${spring-boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>${nacos.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    </project>
    
    

    在父工程Nacos下创建springboot子工程nacos-provide,其pom.xml文件为:

    
    <?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>
        <parent>
            <artifactId>Nacos</artifactId>
            <groupId>com.study.www</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <groupId>com.larscheng.www</groupId>
        <artifactId>nacos-provide</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>nacos-provide</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    在NacosProvideApplication.java中提供一个对外接口,并添加注解@EnableDiscoveryClient 开启服务注册发现功能:

    @RestController
    @EnableDiscoveryClient
    @SpringBootApplication
    public class NacosProvideApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(NacosProvideApplication.class, args);
        }
        
        @GetMapping("/helloNacos")
        public String helloNacos(){
            return "你好,nacos!";
        }
    }
    

    配置文件application.yml进行如下配置

    server:
      port: 9527
    spring:
      application:
        name: nacos-provide
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    

    ok,服务提供者的创建和配置已经完成

    创建服务消费者

    仍然在Nacos工程下创建一个SpringBoot项目子工程命名为nacos-consumer,其pom文件与nacos-provide相同。

    同样为nacos-consumer增加配置文件,内容如下

    server:
      port: 9528
    spring:
      application:
        name: nacos-consumer
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    

    服务消费者这里按照官方文档中的方式通过 RestTemplate+Ribbon进行服务调用,

    NacosConsumerApplication.java代码如下:

    @SpringBootApplication
    @EnableDiscoveryClient
    @RestController
    public class NacosConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(NacosConsumerApplication.class, args);
        }
        
        @Autowired
        private RestTemplate restTemplate;
    
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    
        @GetMapping("/consumer")
        public String test1() {
            return restTemplate.getForObject("http://nacos-provide/helloNacos",String.class);
        }
    }
    

    ok,服务消费者的创建工作也已完成,下面启动两个项目,进行测试

    调用测试

    启动完成后,在日志中应该可以看到如下两条信息

    o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, nacos-provide 192.168.200.1:9527 register finished
        
    o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, nacos-consumer 192.168.200.1:9528 register finished
    

    现在登录Nacos控制台,你会发现服务列表中,已经显示了我们刚才创建的两个项目,并可以对其进行简单的监控和管理。

    服务列表

    浏览器中访问服务消费者的接口 http://127.0.0.1:9528/consumer, 可以看到成功返回结果

    你好,nacos!
    

    总结

    完成上面的服务发现和注册的测试后,我的第一感觉是,好像只用修改配置就可以替换Eureka,好像无缝支持SpringCloud ,
    带着这个内心的冲击感,我到公司的项目中简单试了下水,居然直接注册成功,并且各个服务之间正常使用,虽然只是单独的服务注册发现功能。但这能够说明Nacos天生就无缝衔接SpringCloud生态(当然他也有很多坑)

    看Nacos控制台中的几大分类,明显Nacos的能力绝不仅仅是注册中心这么简单,更多Nacos的使用姿势和坑点,我们未完待续~

    本文源码https://github.com/larscheng/larscheng-learning-demo/tree/master/Nacos

    参考感谢

    Nacos官方手册

    展开全文
  • Nacos快速入门(一):Nacos初探

    千次阅读 2020-04-03 22:02:19
    Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 1.2、功能特性 动态配置服务:动态配置服务让您能够以中心化、外部化和动态化的方式管理所有环境的配置。动态...

    1、简介

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

    1.1、概览

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

    1.2、功能特性

    • 动态配置服务:动态配置服务让您能够以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心化管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。

    • 服务发现及管理:动态服务发现对以服务为中心的(例如微服务和云原生)应用架构方式非常关键。Nacos支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服务发现。Nacos也提供实时健康检查,以防止将请求发往不健康的主机或服务实例。借助Nacos,您可以更容易地为您的服务实现断路器。

    • 动态DNS服务:通过支持权重路由,动态DNS服务能让您轻松实现中间层负载均衡、更灵活的路由策略、流量控制以及简单数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以DNS协议为基础的服务发现,以消除耦合到厂商私有服务发现API上的风险。

    • 服务及其元数据管理:Nacos能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的SLA以及最首要的metrics 统计数据。

    1.3、Nacos地图

    一图看懂 Nacos

    nacosMap.jpg

    • 特性大图:要从功能特性,非功能特性,全面介绍我们要解的问题域的特性诉求
    • 架构大图:通过清晰架构,让您快速进入 Nacos 世界
    • 业务大图:利用当前特性可以支持的业务场景,及其最佳实践
    • 生态大图:系统梳理 Nacos 和主流技术生态的关系
    • 优势大图:展示 Nacos 核心竞争力
    • 战略大图:要从战略到战术层面讲 Nacos 的宏观优势

    1.4、Nacos生态图

    Nacos生态图.png

    Nacos无缝支持一些主流的开源生态,例如Spring CloudApache DubboDubbo MeshKubernetesCNCF

    使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。

    2、Nacos架构

    2.1、基本架构及概念

    nacos基本架构.jpeg

    服务 (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)
    在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。

    2.2、逻辑架构及其组件介绍

    nacos逻辑架构.png

    • 服务管理:实现服务CRUD,域名CRUD,服务健康状态检查,服务权重管理等功能
    • 配置管理:实现配置管CRUD,版本管理,灰度管理,监听管理,推送轨迹,聚合数据等功能
    • 元数据管理:提供元数据CURD 和打标能力
    • 插件机制:实现三个模块可分可合能力,实现扩展点SPI机制
    • 事件机制:实现异步化事件通知,sdk数据变化异步通知等逻辑
    • 日志模块:管理日志分类,日志级别,日志可移植性(尤其避免冲突),日志格式,异常码+帮助文档
    • 回调机制:sdk通知数据,通过统一的模式回调用户处理。接口和数据结构需要具备可扩展性
    • 寻址模式:解决ip,域名,nameserver、广播等多种寻址模式,需要可扩展
    • 推送通道:解决server与存储、server间、server与sdk间推送性能问题
    • 容量管理:管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性
    • 流量管理:按照租户,分组等多个维度对请求频率,长链接个数,报文大小,请求流控进行控制
    • 缓存机制:容灾目录,本地缓存,server缓存机制。容灾目录使用需要工具
    • 启动模式:按照单机模式,配置模式,服务模式,dns模式,或者all模式,启动不同的程序+UI
    • 一致性协议:解决不同数据,不同一致性要求情况下,不同一致性机制
    • 存储模块:解决数据持久化、非持久化存储,解决数据分片问题
    • Nameserver:解决namespace到clusterid的路由问题,解决用户环境与nacos物理环境映射问题
    • CMDB:解决元数据存储,与三方cmdb系统对接问题,解决应用,人,资源关系
    • Metrics:暴露标准metrics数据,方便与三方监控系统打通
    • Trace:暴露标准trace,方便与SLA系统打通,日志白平化,推送轨迹等能力,并且可以和计量计费系统打通
    • 接入管理:相当于阿里云开通服务,分配身份、容量、权限过程
    • 用户管理:解决用户管理,登录,sso等问题
    • 权限管理:解决身份识别,访问控制,角色管理等问题
    • 审计系统:扩展接口方便与不同公司审计系统打通
    • 通知系统:核心数据变更,或者操作,方便通过SMS系统打通,通知到对应人数据变更
    • OpenAPI:暴露标准Rest风格HTTP接口,简单易用,方便多语言集成
    • Console:易用控制台,做服务管理、配置管理等操作
    • SDK:多语言sdk
    • Agent:dns-f类似模式,或者与mesh等方案集成
    • CLI:命令行对产品进行轻量化管理,像git一样好用

    2.3、领域模型

    2.3.1、数据模型

    Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。
    nacos数据模型.jpeg

    2.3.2、nacos服务领域模型

    nacos服务领域模型.jpeg

    2.3.3、配置领域模型

    围绕配置,主要有两个关联的实体,一个是配置变更历史,一个是服务标签(用于打标分类,方便索引),由 ID 关联。

    nacos配置领域模型.jpeg

    参考文献:

    nacos官网

    展开全文
  • Spring Cloud Alibaba Nacos 微服务架构实战
  • nacos 下载与安装 (1) Linux版

    万次阅读 2019-11-22 14:51:42
    nacos 的官方地址 内有文档手册 https://nacos.io/zh-cn/index.html 下载页面 https://github.com/alibaba/nacos/releases nacos 安装 下载后上传到服务器的某个目录下 解压文件 [root@localhost /]# tar...
  • Nacos(一)-下载安装

    万次阅读 2020-03-23 18:36:27
    本篇记录nacos下载、安装以及常用命令。 Nacos是alibaba发布的,中文文档也比较完善,所以跟着官方文档操作起来更加容易。 一、下载 nacos官网快速开始模块可以看到相关内容Nacos快速开始 目前稳定版是1.1.4,但是...
  • Nacos

    2020-10-19 18:11:55
    Nacos Spring Cloud Alibaba https://spring.io/projects/spring-cloud-alibaba Nacos 官网 https://nacos.io/zh-cn/docs/what-is-nacos.html Nacos Git https://github.com/alibaba/nacos 双注册中心,...
  • Nacos--登录管理

    千次阅读 2020-03-01 17:02:27
    修改默认用户名/密码方法 使用管理后台更改密码 使用数据库增删改用户或密码 1 获取加密的密码字符串: pox依赖: <dependency> <groupId>org.springframework.security<.../artifa...
  • Alibaba之Nacos详解

    万次阅读 2019-06-02 14:33:09
    原文链接:https://windmt.com/2018/11/09/intro-to-spring-cloud-alibaba-nacos/ 上个月最后一天的凌晨,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 maven 中央库发布了第一个版本。 目前 ...
  • 什么是 NacosNacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,...
  • 注册中心nacos完整部署及与eureka区别

    万次阅读 2020-09-18 16:16:48
    nacos最近用的比较多,介绍下nacos及部署吧,刚看了下以前写过类似的,不过没写如何部署及与eureka区别,只展示了效果,补补吧。 2.解决方案 2.1 nacos与eureka简要描述 (1)springcloud eureka是注册中心,负责...
  • Nacos(一):Nacos介绍

    千次阅读 2019-07-08 19:28:50
    6月份阿里开源的Nacos发布了1.0.1版本,从去年7月份第一个release版本到现在一直在默默关注 官方的版本规划为:Nacos从0.8.0开始支持生产可用,1.0版本可大规模生产可用,2.0版本接入k8s、SpringCloud、ServiceMesh...
  • docker下安装nacos

    千次阅读 2019-07-14 17:41:31
    [root@localhost ~]# docker pull nacos/nacos-server:1.0.0 这边没有安装最新版,而是指定了版本号。如需要安装最新版,执行以下命令 [root@localhost ~]# docker pull nacos/nacos-server 3、查看nacos镜像 [r...
  • Nacos官网:https://nacos.io/zh-cn/ 一.下载(linux/windows版): https://github.com/alibaba/nacos/releases 二.Windows版解压: 三.进入bin目录: 四.双击运行: 默认端口:8848(珠穆朗玛峰高度)...
  • Nacos快速入门(1):启动Nacos Server

    万次阅读 2019-03-14 09:57:43
    Nacos由阿里于2018年7月开启的一个新的开源项目 官方介绍: Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos ...
  • nacos server默认的登录账号密码

    千次阅读 2019-12-18 17:16:12
    默认的账号密码都是 nacos 登录成功后,如下:
  • nacos,启动一周后,打印日志超多,5G

    万次阅读 2019-04-17 18:49:47
    在配置文件nacos\conf\nacos-logback.xml,根据需求,注释你不要的打印日志 日志最多排名 1,naming-server 2,naming-raft 3,config-memory 4,config-server 5,config-client-request 6,config-trace ...
  • linux下Nacos启动后页面访问不了问题

    万次阅读 热门讨论 2019-01-29 16:04:47
    Nacos 启动 Windows下启动 cmd startup.cmd 或者双击 startup.cmd 文件 linux下启动  ./startup.sh -m standalone 默认启动为集群模式,查看../logs/nacos.log会有报错信息,启动参数standalone 单机模式...
1 2 3 4 5 ... 20
收藏数 18,908
精华内容 7,563
关键字:

nacos