# 什么是 Nacos?

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

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

服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

Kubernetes Service

gRPC & Dubbo RPC Service

Spring Cloud RESTful Service

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 快速开始

安装nacos

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

下载完成之后,解压。根据不同平台,执行不同命令,启动单机版Nacos服务:

  • Linux/Unix/Mac:sh startup.sh -m standalone

  • Windows:cmd startup.cmd -m standalone

startup.sh脚本位于Nacos解压后的bin目录下。

启动之后 nacos默认端口为8848

补充一点,nacos不仅可以做注册中心,还可以做分布式配置,相对SpringCloud 在git做配置较好点

# 构建应用接入Nacos注册中心

在完成了Nacos服务的安装和启动之后,下面我们就可以编写两个应用(服务提供者与服务消费者)来验证服务的注册与发现了。

服务提供者

1、创建第一个Springboot项目  spring-cloud-nacos-provider 作为服务提供者

2、引入gradle

    compile 'org.springframework.boot:spring-boot-starter-actuator'    compile 'org.springframework.boot:spring-boot-starter-web'    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery', version: '0.1.1.RELEASE'

注意:这里之前确实采坑,因为nacos是新生态所以无法自动和cloud或boot版本

一致,所以必须写入版本号,版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版

本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

3、创建主要类

启动入口

package org.gw;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.web.client.RestTemplate;/** * @DATA 2019-03-18 15:21 * @Author 张国伟  WeChat:17630376104 * @Description TODO */@EnableDiscoveryClient@SpringBootApplicationpublic class NoApplication {    public static void main(String[] args) {        SpringApplication.run(NoApplication.class,args);    }}@RestControllerpublic class NacosProducerController {    @RequestMapping("/hello")    public String hello(@RequestParam("name")String name)    {        return "hello::"+name;    }}

内容非常简单,@SpringBootApplication定义是个Spring Boot应用;@EnableDiscoveryClient开启Spring Cloud的服务注册与发现,由于这里引入了spring-cloud-starter-alibaba-nacos-discovery模块,所以Spring Cloud Common中定义的那些与服务治理相关的接口将使用Nacos的实现。这点不论我们使用Eureka、Consul还是其他Spring Cloud整合的注册中心都一样,这也是Spring Cloud做了封装的好处所在

4、配置文件

server:  port: 5005spring:  application:    name: spring-cloud-nacos-provider  cloud:    nacos:      discovery:        server-addr: 127.0.0.1:8848management:  endpoints:    web:      exposure:        include: '*'

5、启动应用程序,启动后可以看到控制台日志出现以下内容说明已经成功注册到nacos中。

Wed Mar 20 08:59:13 CST 2019 sun.misc.Launcher$AppClassLoader@18b4aac2 JM.Log:INFO Log root path: /Users/mac/logs/Wed Mar 20 08:59:13 CST 2019 sun.misc.Launcher$AppClassLoader@18b4aac2 JM.Log:INFO Set nacos log path: /Users/mac/logs/nacos2019-03-20 08:59:13.438  INFO 1645 --- [           main] o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, spring-cloud-nacos-provider 172.20.10.3:5005 register finished

在启动都ok之后,我们可以访问Nacos的管理页面http://127.0.0.1:8848/nacos/来查看服务列表,此时可以看到如下内容:

这里会显示当前注册的所有服务,以及每个服务的集群数目、实例数、健康实例数。点击详情,我们还能看到每个服务具体的实例信息,如下图所示:

服务消费者

接下来,实现一个应用来消费上面已经注册到Nacos的服务。

1、创建一个Spring Boot应用,命名为:spring-cloud-nacos-consumer。

2、编辑pom.xml中的依赖内容,与上面服务提供者的一样即可。

3、创建应用主类,并实现一个HTTP接口,在该接口中调用服务提供方的接口。

package org.gw;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.client.RestTemplateBuilder;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.web.client.RestTemplate;/** * @DATA 2019-03-18 15:45 * @Author 张国伟  WeChat:17630376104 * @Description TODO */@EnableDiscoveryClient@SpringBootApplicationpublic class ConApplication{    @LoadBalanced    @Bean    public RestTemplate resultTemplate(){        RestTemplate template = new RestTemplate();        return template;    }    public static void main(String[] args){        SpringApplication.run(ConApplication.class, args);    }}
package org.gw.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cloud.client.ServiceInstance;import org.springframework.cloud.client.discovery.DiscoveryClient;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;/** * @DATA 2019-03-18 16:06 * @Author 张国伟  WeChat:17630376104 * @Description TODO */@RestControllerpublic class ConController {     @Autowired    RestTemplate restTemplate;    /**     * 消费服务     */    @RequestMapping("/callSayHello")    public String services(@RequestParam("name") String name) {        String callServiceResult = restTemplate.getForEntity("http://spring-cloud-nacos-provider/hello?name="+name,String.class).getBody();        System.out.println(callServiceResult);        return callServiceResult;    }}

4、配置服务名称和Nacos地址,让服务消费者可以发现上面已经注册到Nacos的服务。

server:  port: 5006spring:  application:    name: spring-cloud-nacos-consumer  cloud:    nacos:      discovery:        server-addr: 127.0.0.1:8848management:  endpoints:    web:      exposure:        include: '*'

第五步:启动服务消费者,我们在浏览器测试:

到此nacos单机版的服务与发现就完全实现。

本文章示例:https://github.com/zgw1469039806/SpringCloud-nacos

本文参考:http://blog.didispace.com/spring-cloud-alibaba-1/

作者:小毛毛--专注后端

来源:https://www.cnblogs.com/zgwjava/p/10562775.html

 往期推荐 

?

  • 牛市来了?上班盯盘太累?这五个开源项目了解下!
  • 哈哈,咱们团队早就不用try-catch-finally关闭资源了!
  • 通过源码分析Mybatis是如何返回数据库生成的自增主键值?

 

点击 

c++ 使用nacos_超赞!用阿里开源的Nacos做SpringCloud注册中心真贴心...相关推荐

  1. 一款超赞极简开源文件共享系统,无需注册可直接下载文件

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! ​ 在日常的工作当中,大家可能经常会遇到文件共享的问题,简单一点的会用QQ.微信之类的工具临时处理一下,稍微多点的 ...

  2. 微服务feignclient_搞微服务用阿里开源的 Nacos 真香啊

    本文适合有 Java 基础知识的人群 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来一款开源 Java 版可以实现动态服务发现, ...

  3. 用阿里开源的 Nacos 搞微服务真香!

    作者 | HelloGitHub-秦人 来源 | HelloGitHub(ID:Github520) 头图 |  CSDN 下载自东方IC 今天给大家带来一款开源 Java 版可以实现动态服务发现,配 ...

  4. 9款超赞的AI开源项目!| 本周Github精选

    来源:PaperWeekly 本文共1296字,建议阅读6分钟. 本文为你分享9款实用的AI开源项目,功能强大,值得收藏! Semantic Segmentation PyTorch #PyTorch ...

  5. 超赞!阿里资深P9架构师总结出第一本《Java异步编程实战》

    什么是异步编程: 传统的同步编程是一种请求响应模型,调用一个方法,等待其响应返回 异步编程就是要重新考虑是否需要响应的问题,也就是缩小需要响应的地方.因为越快获得响应,就是越同步化,顺序化,事务化,性 ...

  6. SpringCloud微服务:阿里开源组件Nacos,服务和配置管理

    源码地址:GitHub·点这里||GitEE·点这里 一.阿里微服务简介 1.基础描述 Alibaba-Cloud致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开 ...

  7. 干掉 ZooKeeper?阿里为什么不用 ZK 做服务发现?

    -     前言    - 站在未来的路口,回望历史的迷途,常常会很有意思,因为我们会不经意地兴起疯狂的念头,例如如果当年某事提前发生了,而另外一件事又没有发生会怎样?一如当年的奥匈帝国皇位继承人斐迪 ...

  8. 干掉 ZooKeeper,阿里为什么不用 ZK 做服务发现?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/fIjYVb 站在未 ...

  9. ZooKeeper到底有什么问题?导致阿里为什么不用 ZK 做服务发

    -      前言     - 站在未来的路口,回望历史的迷途,常常会很有意思,因为我们会不经意地兴起疯狂的念头,例如如果当年某事提前发生了,而另外一件事又没有发生会怎样?一如当年的奥匈帝国皇位继承人 ...

最新文章

  1. mysql高级操作_mysql数据库表的高级操作
  2. 从分布式数据库的CAP特性说起
  3. python可以自学吗-没学过编程可以自学python吗
  4. mybatis注册了mapper但是还是报错_springboot整合Mybatis
  5. Mac下通过Anaconda安装Tensorflow
  6. cad幕墙下料lisp_石材幕墙屋面不锈钢角钢接闪带施工方法
  7. Elasticsearch7.15.2 报java.lang.NoClassDefFoundError: org/elasticsearch/client/Cancellable的解决方案
  8. drupal 7在一个form新增或者修改一个字段
  9. 有人说JavaScript是未来的编程语言?这是为什么?
  10. jsonpath学习链接
  11. 图的广度和深度优先路径搜索算法(python实现)
  12. !$boo在php中什么意思,php前戏
  13. 电脑黑客用3D打印钥匙解开高安全性能手铐
  14. sweetalert弹框插架--自定义多按钮事件
  15. 电脑可选更新到底是什么?(功能、质量和驱动程序更新)
  16. 苹果手机怎么发语音短信?
  17. 性别收入差距=歧视?Oaxaca-Blinder分解方法
  18. macOS安装软件的正确方法
  19. 汽车金融风控企业如何开展风控体系建设
  20. d6921高铁时刻表_哈尔滨高铁时刻表

热门文章

  1. 何为量子计算机? | CSDN 博文精选
  2. “5 年内,PC 或将逐渐消失!”| 人物志
  3. 苹果应用审核走进中国!
  4. 华为不可参与 IEEE 审稿但可继续提供赞助;谷歌限制 Chrome 接口惹非议;Mozilla 号召用户换火狐 | 开发者周刊...
  5. 京东淘汰“三类人”,近 18 万员工懵了?!
  6. 是时候让 JavaScript 面向对象了!
  7. 为什么好的程序员会写出糟糕的单元测试?
  8. 今日头条们的 App 内容页技术实现与优化 | CSDN技术头条
  9. 比尔·盖茨:美国优先的世界观使我担心
  10. Python 崛起、JavaScript 制霸 —— GitHub 2017 年度开源报告里的语言之争