热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Nacos做为SpringCloud的注册中心

1.Nacos介绍1.1Nacos关键特性Nacos致力于发现、配置和管理微服务。Nacos支持几乎所有主流类型的“服务”的发现、配置和管理:Kubernete

1. Nacos介绍

1.1 Nacos关键特性

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 统计数据。

1.2 Nacos 生态图

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


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

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


2. 启动Nacos服务

2.1 预备环境准备

Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:


  • 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  • 64 bit JDK 1.8+;下载 & 配置。
  • Maven 3.2.x+;下载 & 配置。

2.2 下载源码或者安装包

你可以通过源码和发行包两种方式来获取 Nacos。


  • 从 Github 上下载源码方式

    git clone https://github.com/alibaba/nacos.git
    cd nacos/
    mvn -Prelease-nacos clean install -U
    ls -al distribution/target/
    cd distribution/target/nacos-server-$version/nacos/bin

  • 下载编译后压缩包方式

您可以从 最新稳定版本 下载 nacos-server-$version.zip 包。

unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gzcd nacos/bin

2.3 启动服务器


  • Linux/Unix/Mac

启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone


  • Windows

启动命令:
cmd startup.cmd
或者双击startup.cmd运行文件。

2.4 关闭服务器


  • Linux/Unix/Mac

sh shutdown.sh


  • Windows

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

2.5 控制台

浏览器打开 http://127.0.0.1:8848/nacos
默认的用户名密码都是nacos


3. 启动服务发现

3.1 service-provider

添加依赖:

org.springframework.bootspring-boot-starter-web

org.springframework.cloudspring-cloud-starter-alibaba-nacos-discovery0.9.0.RELEASE

配置文件

server:port: 8021
spring:application:name: service-providercloud:nacos:discovery:server-addr: 127.0.0.1:8848

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {public static void main(String[] args) {SpringApplication.run(NacosProviderApplication.class, args);}@RestControllerclass EchoController {@GetMapping(value = "/echo")public String echo(String name) {return "Hello " + name;}}
}

启动服务即可在Nacos控制台的服务列表中看到。

3.2 service-consumer

添加依赖:

org.springframework.bootspring-boot-starter-web

org.springframework.cloudspring-cloud-starter-alibaba-nacos-discovery0.9.0.RELEASE

org.springframework.cloudspring-cloud-starter-openfeign

配置文件

server:port: 8011
spring:application:name: service-consumercloud:nacos:discovery:server-addr: 127.0.0.1:8848

这里使用feign调用provider
client

@FeignClient(name = "service-provider")
public interface NacosClient { @GetMapping(value = "/echo")ResponseEntity echo(String name) ;
}

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {public static void main(String[] args) {SpringApplication.run(NacosConsumerApplication.class, args);}@RestControllerpublic class TestController {@Autowiredprivate NacosClient client;@GetMapping(value = "/echo")public ResponseEntity echo(String name) {return client.echo(name);}}}

启动Consumer,然后访问http://localhost:8011/echo?name=zhangsan即可看到provider的响应。


4. 启动配置管理

将service-consumer项目改成从Nacos拿配置
依赖

org.springframework.bootspring-boot-starter-web

org.springframework.cloudspring-cloud-starter-alibaba-nacos-discovery0.9.0.RELEASE

org.springframework.cloudspring-cloud-starter-openfeign

org.springframework.cloudspring-cloud-starter-alibaba-nacos-config0.9.0.RELEASE

配置文件

spring:application:name: service-consumerprofiles:active: singlecloud:nacos:config:server-addr: 127.0.0.1:8848prefix: ${spring.application.name}file-extension: yaml

为了测试方便,在TestController中添加一个配置变量

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {public static void main(String[] args) {SpringApplication.run(NacosConsumerApplication.class, args);}@RestController@RefreshScopepublic class TestController {@Autowiredprivate NacosClient client;@Value("${useLocalCache:false}")private boolean useLocalCache;@GetMapping("/get")public boolean get() {return useLocalCache;}@GetMapping(value = "/echo")public ResponseEntity echo(String name) {return client.echo(name);}}}

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profile.active}.${file-extension}

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profile.active 即为当前环境对应的 profile
    注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

打开Nacos控制台的配置管理,添加配置项


  • Data ID:service-consumer-single.yaml
  • 配置内容:

server:port: 8011spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848 useLocalCache: false

重新启动service-consumer,访问http://localhost:8011/echo?name=zhangsan可看到provider的响应,访问http://localhost:8011/get,此时返回内容为false。
在Nacos控制台的配置管理更新值useLocalCache: true,再次访问http://localhost:8011/get,此时返回内容为true,说明程序中的useLocalCache值已经被动态更新了。

 


推荐阅读
  • 阿里首席架构师科普RPC框架
    RPC概念及分类RPC全称为RemoteProcedureCall,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程 ... [详细]
  • 基于.NET Core框架nacos的简单应用
    什么是Nacos?服务(Service)是Nacos世界的一等公民。Nacos支持 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • 在这分布式系统架构盛行的时代,很多互联网大佬公司开源出自己的分布式RPC系统框架,例如:阿里的dubbo,谷歌的gRPC,apache的Thrift。而在我们公司一直都在推荐使用d ... [详细]
  • 阿里云监控URL的配置笔记
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了阿里云监控URL的配置笔记相关的知识,希望对你有一定的参考价值。有很多细节需要记录 ... [详细]
  • 服务注册中心到底应该选AP模型还是CP模型?
    当下,分布式系统正变得越来越重要,大型网站几乎都是分布式的。分布式系统的最大难点,就是各个节点的状态 ... [详细]
  • 分布式服务框架和原理简章
    应用架构演进这里的架构演进应该是从服务化的角度来说,应该说随着业务发展,应用规模扩大,系统的一些公共服务就会抽取出来,独立开发,部署,维护,用来解决并发,扩展,维护的问题。传统垂直 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 精讲代理设计模式
    代理设计模式为其他对象提供一种代理以控制对这个对象的访问。代理模式实现原理代理模式主要包含三个角色,即抽象主题角色(Subject)、委托类角色(被代理角色ÿ ... [详细]
  • SOA架构理解理解SOA架构,了解ESB概念,明白SOA与微服务的区别和联系,了解SOA与热门技术的结合与应用。1、面向服务的架构SOASOA(ServiceOrien ... [详细]
  • 本文为转载,原连接:https:www.zhihu.comquestion40822826简单说一下吧做要解释这些要从netconf说起。netconf ... [详细]
  • 小白轻松使用axis2构建webservice
    引言:使用axis2是来实现webservice接口是比较常见的,就我来说,如果要学一个首次接触东西,简单了解相关基础概念 ... [详细]
author-avatar
气质朱总_206
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有