1.什么是Nacos

  Nacos的官网对这一问题进行了详细的介绍,通俗的来说:

  Nacos是一个服务发现组件,同时也是一个配置服务器,它解决了两个问题:

    1.服务A如何发现服务B

    2.管理微服务的配置

2.搭建Nacos Server

2.1  环境准备

  Nacos依靠java环境运行,搭建Nacos Server,需要配置maven环境,版本环境要求如下:

    1、64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac
    2、64 bit JDK 1.8+
    3、Maven 3.2.x+

2.2 服务端获取

  Nacos提供了两种方式获取Nacos的服务端:

    1、源码下载编译

    2、下载 Release 包

2.2.1 源码下载编译

  在你需要安装的地址下,执行:git clone https://github.com/alibaba/nacos.git

  将源码下载到本地之后,进入源码目录:cd nacos

    

  执行命令:mvn -Prelease-nacos clean install -U

    

  进入启动命令:cd distribution/target/nacos-server-1.1.3/nacos/bin/

2.2.2 下载 Release 包

  从这个网址下载nacos-server-$version.zip 包,执行解压缩命令:unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
  进入命令执行页面:  cd nacos/bin

2.3 启动服务器

  Lunix系统:

    启动命令(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。

    

3. 将应用注册到Nacos

  首先,在加依赖,在dependencies中添加

 <dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

  然后,修改配置(server-addr不要加http或者https前缀,直接主机名/IP/域名 + 端口号就可以了)

spring:
cloud:
nacos:
discovery:
# 指定nacos server地址
server-addr: localhost:8848
application:
name: study01

 

  启动服务,打开Nacos Server控制台,可以看见刚刚启动的服务已经注册成功。  

PS:对于Nacos Server版本与Nacos Client版本对应问题:

  应用集成Nacos Client从而和Nacos Server通信,我们通过查看spring-cloud-alibaba-dependencies文件中使用了哪个Nacos Client版本,下载相同版本的Nacos Server版本即可。

    

  可以看见我当前版本的Spring Cloud Alibaba使用的Nacos Client版本为1.1.1,由于Nacos没有提供Nacos server1.1.1版本包,所以我直接使用了Nacos server1.1.3。

 

4.服务间调用

  如何在服务A中调用服务B的请求,分为两步进行:

  1.获取服务B的URL,因为考虑到服务B可能部署在多个服务器,或者更换升级服务器,所以不能够直接写死URL,我们利用DiscoveryClient接口动态的获取服务B的URL

import org.springframework.cloud.client.discovery.DiscoveryClient;

private final DiscoveryClient discoveryClient;

// 服务B所有示例的信息
List<ServiceInstance> instances = discoveryClient.getInstances("服务B");
String targetURL = instances.stream()
.map(instance -> instance.getUri().toString() + "/***/***")
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("当前示例不存在"));

  2.调用服务B的请求,我们使用RestTemplate接口完成这一操作

import org.springframework.web.client.RestTemplate;

private final RestTemplate restTemplate;

Demo forObject = restTemplate.getForObject(targetURL, Demo.class, "请求参数");

5.服务发现的领域模型

5.1 领域模型有哪些,有什么作用?

      

  关于领域模型,可以通过上图来理解:

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

      

    Namespace之下是Group(分组),Nacos默认Group是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去,Group可以方便我们的管理。

      

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

     

5.2 如何指定领域模型

  首先在控制台新建一个命名空间

    

    

  创建成功之后得到了一个UUID,将此UUID配置在配置文件中(一定要配置UUID,而不是命名空间名称),同时配置集群名称:

spring:
cloud:
nacos:
discovery:
# 指定nacos server地址
server-addr: localhost:8848
namespace: ab9783a7-dade-4da3-9abf-5cb2f5c52d59
cluster-name: HZ

  可以在控制台查看到,多出了一个dev命名空间

    

  服务中也多出了一个HZ集群

    

6. 元数据

  Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。

6.1 元数据的作用

  1、提供描述信息

  2、让微服务的调用更加灵活

    微服务版本控制

6.2 如何配置元数据

  1、控制台设置(key-value形式)

  2、配置文件配置

spring:
cloud:
nacos:
discovery:
    # 元数据
metadata:
target-version: v1

Spring Cloud Alibaba学习笔记(2) - Nacos服务发现的更多相关文章

  1. Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理

    随着微服务概念的流行,越来越多的公司采用`Spring Cloud`全家桶构建微服务系统,实现业务的快速迭代.`Spring Cloud`提供了快速构建分布式微服务常用组件,包括`Spring Clo ...

  2. Spring Cloud Alibaba学习笔记(1) - 整合Spring Cloud Alibaba

    Spring Cloud Alibaba从孵化器版本毕业:https://github.com/alibaba/spring-cloud-alibaba,记录一下自己学习Spring Cloud Al ...

  3. Spring Cloud Alibaba学习笔记(22) - Nacos配置管理

    目前业界流行的统一配置管理中心组件有Spring Cloud Config.Spring Cloud Alibaba的Nacos及携程开源的Apollo,本文将介绍Nacos作为统一配置管理中心的使用 ...

  4. Spring Cloud Alibaba学习笔记(15) - 整合Spring Cloud Gateway

    Spring Cloud Gateway 概述 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于Netty.Reactor以及WEbFlux构建,它 ...

  5. Spring Cloud Alibaba学习笔记(3) - Ribbon

    1.手写一个客户端负载均衡器 在了解什么是Ribbon之前,首先通过代码的方式手写一个负载均衡器 RestTemplate restTemplate = new RestTemplate(); // ...

  6. Spring Cloud Alibaba学习笔记(23) - 调用链监控工具Spring Cloud Sleuth + Zipkin

    随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求陷入性能瓶颈或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何 ...

  7. Spring Cloud Alibaba学习笔记

    引自B站楠哥:https://space.bilibili.com/434617924 一.创建父工程 创建父工程hello-spring-cloud-alibaba Spring Cloud Ali ...

  8. Spring Cloud Alibaba学习笔记(12) - 使用Spring Cloud Stream 构建消息驱动微服务

    什么是Spring Cloud Stream 一个用于构建消息驱动的微服务的框架 应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互, ...

  9. Spring Cloud Alibaba学习笔记(7) - Sentinel规则持久化及生产环境使用

    Sentinel 控制台 需要具备下面几个特性: 规则管理及推送,集中管理和推送规则.sentinel-core 提供 API 和扩展接口来接收信息.开发者需要根据自己的环境,选取一个可靠的推送规则方 ...

随机推荐

  1. linux内核中i2c驱动中slave模式接口的调用

    1. 关注unreg_slave接口 1.1 这个接口在哪里被调用呢? 在drivers/i2c/i2c-core-slave.c中 int i2c_slave_unregister(struct i ...

  2. Nessus更新到8.6.0

    Nessus更新到8.6.0 此次更新,变化主要有以下几点:(1)加强过期提醒.购买链接,并且允许用户启用关闭提醒功能.(2)Nessus基础班和试用版中,导出的报告默认带有水印.(3)Nessus企 ...

  3. C++中操作符——学习笔记

    1.箭头操作符 用于指针. 使用容器vector存指针,迭代器是指针需要 解引用后再解引用才是数据.图中漏掉了iter++ 记得要delete 2.算术运算符 %:获得余数. 优先级. 溢出: 除法的 ...

  4. eclipse中导入spring-boot框架的jar包方法

    如下代码引入了spring-boot的包 package openresty; import java.io.IOException; import java.security.GeneralSecu ...

  5. android webview带cookie访问url

    问题描述在原生和h5混合开发的时候会遇到这么一个问题,用webview加载某个url时,你只是app登录了账号,但是网页却没有,所有会禁止访问此url,webview就会显示白屏.所以要访问此url, ...

  6. Python subprocess中的run方法

    调用subprocess的推荐方法是对于它可以处理的所有使用场景都使用run()函数. run()函数是在Python 3.5中添加的,如果在老版本中使用,需要下载并扩展. 扩展安装方式: $ pip ...

  7. Spring Boot应用的打包和部署

    传统的Web应用在发布之前通常会打成WAR包,然后将WAR包部署到Tomcat等容器中使用,而通过前面的学习我们已经知道,Spring Boot应用既能以JAR包的形式部署,又能以WAR包的形式部署. ...

  8. 多个wav音频文件合并(连接)成一个文件

    场景:一段声音从浏览器麦克风缓冲上一段一段发给服务器,按照时间戳生成很多文件. 目的:把他们按时间顺序连到一个时间轴上. 命令如下: ffmpeg -f concat -i list.txt out. ...

  9. sudo启动程序引发的进程个数不对

    这几天把自己负责的服务改成了多进程模型,然后使用sudo来启动进程,示例程序如下:   int main(void)   {   fork();   while(1);   }   编译: `gcc ...

  10. UML学习笔记:类图

    UML学习笔记:类图 有些问题,不去解决,就永远都是问题! 类图 类图(Class Diagrame)是描述类.接口以及它们之间关系的图,用来显示系统中各个类的静态结构. 类图包含2种元素:类.接口, ...