一、简介

在Spring Cloud系列课程中,我们已经实现了利用Eureka、Consul、Zookeeper作为我们的服务注册中心,在Spring Cloud Alibaba中,提供了一个更加简洁方便的服务注册中心组件 - Nacos。

  • 为什么叫Nacos?

前四个字母分别为Naming和Configuration的前两个字母,最后的s为service。

  • Nacos是什么?

一个更易于构建原生应用的动态服务发现、配置管理和服务管理平台(Dynamic Naming and Configuration Service),Nacos就是注册中心  + 配置中心的组合。等价于:Nacos = Eureka + Config + Bus

  • Nacos能干嘛?
  1. 替代Eureka做服务注册中心;
  2. 替代Config做服务配置中心;

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

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

  • 去哪里下载Nacos以及文档地址?

Nacos各个版本下载地址

Nacos GitHub地址

Nacos官网

Nacos文档地址

二、Nacos的关键特性

  • 服务发现和服务健康监测

    Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。

    Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

  • 动态配置服务

    动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

    动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

    配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

    Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

  • 动态 DNS 服务

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

    Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表.

  • 服务及其元数据管理

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

Nacos 全景图如下图:

如 Nacos 全景图所示,Nacos 无缝支持一些主流的开源生态,例如

  • Spring Cloud
  • Apache Dubbo and Dubbo Mesh TODO
  • Kubernetes and CNCF TODO。

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

关于如何在这些生态中使用 Nacos,请参考以下文档:

Nacos与Spring Cloud一起使用

Nacos与Kubernetes一起使用

Nacos与Dubbo一起使用

Nacos与gRPC一起使用

Nacos与Istio一起使用

三、安装并运行Nacos

预备环境准备:

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+;下载 & 配置。

【a】先从官网下载Nacos,这里使用nacos-server-1.2.0版本的为例,如下图:

【b】解压缩安装包,直接运行bin目录下的startup.cmd

启动命令:

cmd startup.cmd

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

[【c】命令运行成功后直接访问:http://localhost:8848/nacos;默认的账号密码都是nacos。

如果成功进入Nacos控制台,说明Nacos安装并且运行成功。

【d】关闭服务器(Windows系统)

cmd shutdown.cmd

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

四、Nacos之服务提供者注册

前面我们已经搭建好了Nacos服务端,大家是不是迫不及待想玩玩我们的服务到底怎么注册进Nacos?

接下来,我们就以一个示例详细说明整个注册的步骤,通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

这里我们新建一个module【springcloudalibaba-provider-payment9001】

【a】父工程pom.xml:由于是spingcloud alibaba的第一个子模块,需要在父工程引入springcloud alibaba的总依赖

<!--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>

【b】本工程pom.xml:添加spring-cloud-starter-alibaba-nacos-discovery服务注册发现相关依赖

<?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>springcloud2020</artifactId><groupId>com.wsh.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloudalibaba-provider-payment9001</artifactId><dependencies><!--SpringCloud ailibaba nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- SpringBoot整合Web组件 --><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.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

【c】application.yml:指定nacos服务端地址,服务名称,对外保留监控端点等

spring:application:name: springcloudalibaba-provider-paymentcloud:nacos:discovery:server-addr: localhost:8848  #指定Nacos服务端地址
management:endpoints:web:exposure:include: '*'  #暴露的监控端点
server:port: 9001 #服务端口号

【d】主启动类

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

【e】业务类

package com.wsh.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(value = "/payment/nacos/{name}")public String getPayment(@PathVariable("name") String name) {return "[springcloudalibaba-provider-payment]注册到Nacos, 端口号: " + serverPort + ", this name is " + name;}}

【f】测试

启动项目,进入nacos控制台:http://localhost:8848/nacos/,如果在服务管理 -> 服务列表中可以看到我们自己的服务【springcloudalibaba-provider-payment】

说明我们成功完成了服务注册进Nacos。Nacos控制台提供了很多关于微服务实例的信息,如下图:

微服务详情信息:

微服务示例代码:用来获取某个微服务的所有实例信息等

总体来说,Nacos提供的可视化控制台比Eureka的强大了很多,至少nacos提供了强制剔除实例的操作按钮,而Eureka如果需要强制剔除实例的话,还需要手动发送post请求去剔除,较麻烦。

接下来我们浏览器访问:http://localhost:9001/payment/nacos/weishihuai

以上就是关于如何将服务注册进Nacos的详细步骤,总的来说,还是比较简单的。

【g】补充说明

为了后面演示服务消费者负载均衡调用服务提供者的功能,而我们现在只有一个服务提供者,需要提供多一个,这里我们新建多一个module【springcloudalibaba-provider-payment9002】,代码跟9001除了端口号不一样,其他全部一样,这里就不过多阐述,相信大家都可以完成的:

创建完启动项目9002,访问nacos控制台,可以看到实例个数已经变为2了,说明成功搭建。

五、Nacos之服务消费者注册和负载均衡

新建一个module【springcloudalibaba-consumer-nacos-order83】作为服务消费者,通过远程调用服务提供者【springcloudalibaba-provider-payment】的接口。

【a】pom.xml依赖:加入nacos相关依赖spring-cloud-starter-alibaba-nacos-discovery

<?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>springcloud2020</artifactId><groupId>com.wsh.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloudalibaba-consumer-nacos-order83</artifactId><dependencies><!--SpringCloud ailibaba nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- SpringBoot整合Web组件 --><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.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

【b】application.yml

server:port: 83 #服务端口号
spring:application:name: springcloudalibaba-consumer-nacos-ordercloud:nacos:discovery:server-addr: localhost:8848  #指定nacos服务端地址#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:provider-payment: http://springcloudalibaba-provider-payment   #名字对应到服务提供者application.name

【c】主启动类

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

【d】负载均衡配置类:跟以前Spring Cloud的负载均衡配置一模一样。

package com.wsh.springcloud.alibaba.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;/*** @Description 负载均衡配置* @Date 2020/8/30 10:30* @Author weishihuai* 说明: 跟前面讲解的Spring Cloud负载均衡配置一模一样*/
@Configuration
public class ApplicationContextConfig {@Bean@LoadBalancedpublic RestTemplate getRestTemplate() {return new RestTemplate();}
}

【e】测试负载均衡业务方法

package com.wsh.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;/*** @Description 服务负载均衡调用测试* @Date 2020/8/30 10:30* @Author weishihuai* 说明:*/
@RestController
public class OrderNacosController {/*** 注入restTemplate*/@Resourceprivate RestTemplate restTemplate;/*** 获取到服务提供者URL*/@Value("${service-url.provider-payment}")private String paymentProviderURL;@GetMapping(value = "/consumer/payment/nacos/{name}")public String paymentInfo(@PathVariable("name") String name) {return restTemplate.getForObject(paymentProviderURL + "/payment/nacos/" + name, String.class);}}

【f】测试

启动服务消费者order83,查看nacos服务注册列表:

可见,服务消费者order83也成功注册进nacos,接下来我们测试负载均衡调用,其实Nacos默认集成了Ribbon负载均衡功能,可以看到我们在pom.xml中并没有单独引入Ribbon的依赖,原因是:spring-cloud-starter-alibaba-nacos-discovery里面已经集成了Ribbon,如下图所示:

然后我们浏览器多次访问:http://localhost:83/consumer/payment/nacos/weixiaohuai

可以看到,跟Spring Cloud一样,服务消费者默认采用的轮训策略去调用服务提供者的接口,说明我们成功利用nacos实现了服务的负载均衡调用。

六、总结

本文通过示例详细说明了如何搭建Nacos服务器并且将我们的微服务注册进Nacos以及实现了客户端服务的负载均衡调用,个人感觉比起Eureka来说配置方面还是比较简洁的。以上相关项目的代码我已经放在Gitee上,有需要的小伙伴可以去拉取进行学习:https://gitee.com/weixiaohuai/springcloud_Hoxton,由于笔者水平有限,如有不对之处,还请小伙伴们指正,相互学习,一起进步。

参考资料:

https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-config-example

https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

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

下面是笔者总结的关于Spring Cloud Alibaba教程系列文章目录,有需要的小伙伴可以前往学习:

1. Spring Cloud Alibaba入门简介

2. Spring Cloud Alibaba Nacos之服务注册中心

3. Spring Cloud Alibaba Nacos之服务配置中心

4. Spring Cloud Alibaba Nacos集群和持久化配置

5. Spring Cloud Alibaba Sentinel之入门篇

6. Spring Cloud Alibaba Sentinel之流控规则篇

7. Spring Cloud Alibaba Sentinel之服务降级篇

8. Spring Cloud Alibaba Sentinel之热点参数限流篇

9. Spring Cloud Alibaba @SentinelResource配置详解

10. Spring Cloud Alibaba Sentinel之服务熔断篇

11. Spring Cloud Alibaba Sentinel之持久化篇

12. Spring Cloud Alibaba Seata处理分布式事务及案例实战

13. Spring Cloud Alibaba Seata工作原理

Spring Cloud Alibaba Nacos之服务注册中心相关推荐

  1. 【深入了解Spring Cloud Alibaba Nacos:服务注册和配置中心】—— 每天一点小知识

  2. nacos 配置动态刷新_使用 Spring Cloud Alibaba Nacos Config 作为配置中心

    什么是 Nacos Config 在分布式系统中,由于服务数量巨多,为了方便服务 配置文件统一管理,实时更新,所以需要分布式配置中心组件. Spring Cloud Alibaba Nacos Con ...

  3. Spring Cloud Alibaba——Nacos实现服务治理

    引言 本博客总结微服务开发中各个微服务调用的实现,并使用 Nacos 完成服务注册和发现. 文章中会涉及到 maven 的使用,以及 spring boot 的一些知识.开发工具采用 IDEA 202 ...

  4. 新 Spring Cloud (一) 之 Eureka 服务注册中心

    文章目录 一.前言 0. 之前写过两篇Spring Cloud,但是感觉不够具体,所以重新写了一份. 1. SpringCloud 2. 什么是Eureka 3. 原理图 二.基本使用实例 1. 场景 ...

  5. (三)Alian 的 Spring Cloud Eureka Server(服务注册中心)

    目录 一.创建Eureka服务工程 1.1.第一步(创建工程) 1.2.第二步(springboot工程) 1.3.第三步(工程设置) 1.4.第四步(依赖选择) 二.配置 2.1.pom文件 2.2 ...

  6. Spring Cloud Alibaba —— Nacos Config 配置中心

    导航 引言 一.什么是配置中心 二.常见的配置中心组件 三.Nacos Config 入门 四.Nacos Config 动态配置 4.1 硬编码方式(默认支持动态生效) 4.2 属性注入 五.配置共 ...

  7. Spring Cloud Alibaba教程:使用Nacos作为服务注册中心

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 什么是Nacos? Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易 ...

  8. Spring Cloud Alibaba Nacos 分布式配置中心

    文章目录 1 摘要 2 核心 Maven 依赖 3 核心代码 3.1 bootstrap 配置文件 3.2 application 配置文件 3.3 配置测试类 - Controller 层 3.4 ...

  9. Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 11.1 Spring Cloud Alibaba Nacos 概述

    11.1 Spring Cloud Alibaba Nacos 概述 11.1.1 Spring Cloud Alibaba 简介 在一开始,我们先简单介绍下Spring Cloud Alibaba的 ...

  10. 用Spring Cloud Alibaba开发微服务会更香吗?

    关注DD,除了前沿消息,还有每周福利哦 Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案,它是Spring Cloud组件被植入Alibaba元素之后的产物. 利用Spri ...

最新文章

  1. iOS ALAsset的选取和存储
  2. poj 2362(剪枝)
  3. Qt4程序在windows平台下打包发布
  4. Silverlight专题(10)- WatermarkedTextBox使用
  5. php 安全基础 附录 A. 配置选项
  6. Django 如何展示Media底下的图片
  7. python从入门到放弃-Python数据分析从入门到放弃(十五)爬虫(番外)基金选取实例...
  8. 简单介绍如何用Reporting Service制作报表
  9. java 修改request中的参数_springcloud 中 zuul 修改请求参数信息的方法
  10. 黄山市区到黄山风景区有多远,如何到黄山景区
  11. 欧美明星,明星照片,韩国明星,街拍照片
  12. matlab中根据表格数据画图,excel 表格数据画图-如何利用matlab根据excel表格里面的数据画图...
  13. 远程计算机网络会议有哪些优缺点,远程会议
  14. 对抛物线准线与焦点弦的思考与总结
  15. 报表功能升级|宜搭新增的这4项图表组件太好用了吧
  16. mcs51单片机嵌入式c语言习题,MCS-51单片机复习题参考题库.doc
  17. Qt对话框的事件循环分析(子线程中不能创建UI窗体分析)
  18. 函数的连续性和间断点——“高等数学”
  19. 北航计算机学硕和专硕的录取率,北航清退404位学生!过来人告诉你,读研和读博的压力比想象更大...
  20. 突然发现显卡的金手指有一根短一截

热门文章

  1. 中条码一般为四色怎么转单色黑_条码机适用的耗材判断标准
  2. php 继承 父类使用子类,PHP父类调用子类方法实例
  3. mysql 全文搜索怎么设置_mysql 全文搜索 技巧
  4. 信贷违约风险预测(一)样本数据
  5. 算法:移除最外层的括号1021. Remove Outermost Parentheses
  6. 获取最顶层的ViewController top ViewController swift
  7. React Native之原理浅析, iOS原理分析与实践解析、Android原理分析与实践解析
  8. java的流套接_Java是什么原因导致网络套接字的流结束?
  9. 基于python的电商评论分析_Python实现爬取并分析电商评论
  10. 频谱感知3:合作频谱检测中的硬合并与软合并