点击蓝字关注我们

大家好,我是杰哥,转眼间,我们的Spring Cloud专辑已到了第五次分享,而我们的注册中心篇章已经分别完成了Eureka、zookeeper篇,今天正式进入nacos篇的学习nacos作为注册中心和配置中心,这两年的热度还是挺高的。尤其是Eureka官方已经宣布Eureka2.0将会停止维护,naocs则变得更有优势。它的版本更迭相对来说也比较快,按照目前的势头,相信会渐渐成长为Spring Cloud中配置中心和注册中心的独一无二的注册中心选择本次文章只涉及nacos作为注册中心的部分功能,关于配置中心,则是我们注册中心篇结束之后的另一个篇章,敬请期待哦~

一 入门

初识nacos

01.什么是nacos

先来看看它的名字 Nacos,Na、co字母分别为 Naming和 Configuration的前两个字母,s 为Service这个是官网上关于Nacos服务的分级存储模型其实,分布式服务都基本如此。比如我们说,一个订单服务,可以分为不同环境,如开发、测试、生产环境,每个环境则是由一个集群构成,而每个集群,则是由一个个实例构成的我们要调用一个服务,nacos会根据我们指定的服务名、集群名,根据负载均衡算法,动态路由到某个特定的服务实例,也就是说,我们最终调用的实际上是一个实例总的来说,它是由阿里巴巴推出的一个开源项目,是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。可帮助我们快速实现动态服务发现、服务配置、服务元数据及流量管理

02.有哪些特性 ?

1)服务发现和服务健康监测支持基于DNS和基于 RPC的服务发现提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求2)动态 DNS 服务动态 DNS 服务支持权重路由,可以更容易地实现中间层负载均衡它使用Ribbon实现负载均衡)、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务它使用Ribbon实现负载均衡3)服务及其元数据管理Nacos可以实现从微服务平台建设的视角,管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据

03.安装nacos注册中心

步骤比较简单1)下载源码或者安装包安装包地址:https://github.com/alibaba/nacos/releases2)解压并启动a Linux/Unix/Mac系统启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

b ubuntu系统或者运行脚本报错提示[[符号找不到,可尝试如下运行:

bash startup.sh -m standalone

c Windows系统启动命令:

cmd startup.cmd

或者双击startup.cmd运行文件3)验证服务启动成功之后,访问http://127.0.0.1:8848/nacos,输入默认用户名、密码:nacos/nacos,即可好了,nacos注册中心已经就这样跑起来了~由于实战环节,我们会涉及到使用Feign进行服务之间的远程调用,所以先简单介绍一下Feign

04.什么是feign

Feign是一个声明式的Web Service客户端,使得编写Web Service客户端变得非常容易,只需要创建一个接口,然后在上面添加注解即可实现服务远程调用

二 实战

demo跑起来

我们将分别演示如何实现生产者、消费者,以及消费者如何调用生产者,针对多个生产者,消费者在调用时又是如何进行选择的这四个功能由于生产者和消费者均为nacos的客户端,那么,他们需要引入的依赖以及注册中心的配置等基本一致。所以我们将它们放进同一个父项目:nacos_discovery中即可,最后的示例代码框架如下所示

01.建立父项目

建立父项目-nacos_discovery,配置其pom文件如下

UTF-8UTF-81.8Greenwich.RELEASE2.1.0.RELEASEorg.springframework.bootspring-boot-dependencies2.1.3.RELEASEpomimportorg.springframework.cloudspring-cloud-dependencies${spring.cloud.version}pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies${spring.cloud.alibaba.version}pomimportorg.projectlomboklomboktruepomimport

需要注意的是,Spring Cloud与SpringBoot之间版本的对应关系,若关系配置不一致,则会出现服务注册不成功等问题建立好了父级项目,接下来我们分别实现服务生产者和服务消费者

02.建立生产者

建立生产者,也就是说需要建立父级项目的子模块项目了,那么在IDEA中如何建立多模块的项目呢?杰哥说,这个不难,follow me~step 1 File -> Project Structure...step2选择Module ->点击“+”号,选择New Module step3 类型项目选择Maven,并设置jdkstep4选择父项目 nacos_discovery,填写项目名称:nacos_providerstep5点击finish,子项目就建好了此时查看nacos_provider的pom文件,发现它的parent依赖,就是我们选择的父项目nacos_discovery而且父级项目的pom文件中也多了一个名称为nacos_provider的module生产者的项目创建好了,接下来看看怎么去实现生产者呢?我们先做个简单的分析:生产者首先需要把自己的服务发布在注册中心上,供消费者调用,那么就需要为它配置注册中心,并且需要发布服务1) pom文件

org.springframework.bootspring-boot-starter-webcom.alibaba.cloudspring-cloud-starter-alibaba-nacos              -discoveryorg.springframework.cloudspring-cloud-starter-openfeignorg.projectlomboklombok

分别引入spring-cloud-starter-alibaba-nacos-discovery和

spring-cloud-starter-openfeign,用于服务注册和开启允许被调用功能

2)application.yml配置文件

server:port: ${port:8860} #服务启动端口spring:application:name: nacos-providercloud:nacos:discovery:server-addr: 127.0.0.1:8848

分别配置服务启动端口、服务名称以及注册中心nacos-server的地址 3)发布服务创建controller类:ProviderController

@RestController@Slf4jpublic class ProviderController {@GetMapping("/hello")public String hello(){log.info("provider be invoked!");        return "hello world!";}}

新建服务“/hello”4)启动类

@SpringBootApplication@EnableDiscoveryClient //开启服务发现@EnableFeignClients //开启Feign客户端public class ProviderStartApplication {public static void main(String[] args) {        SpringApplication.run(ProviderStartApplication.class,args);}}

除了基本注解@SpringBootApplication以外,分别添加@EnableDiscoveryClient(开启服务发现),@EnableFeignClients( 开启Feign客户端,表示生产者的服务可以被发现,并且可以使用Feign的方式进行调用5)启动项目,查看nacos服务列表我们看到,服务生产者nacos_provider已成功注册在nacos-server

03.建立消费者

服务消费者的建立过程跟生产者的完全一样,我们直接看如何实现服务消费者1) pom文件

org.springframework.bootspring-boot-starter-webcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.cloudspring-cloud-starter-openfeignorg.projectlomboklombok

同生产者服务引入的依赖完全一样2)application.yml配置文件

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

与生产者的配置项完全一样,分别配置服务启动端口、服务名称以及注册中心nacos-server的地址 3)使用feign调用服务

@FeignClient(value = "nacos-provider")public interface ProviderClient {@GetMapping("/hello")     String hello();}

使用feign调用比较简单,只需要新建一个接口,在接口上使用@

FeignClient声明一下,需要调用的是哪个服务,然后在方法里,使用Restful注解@GetMapping

4)controller

@RestControllerpublic class ConsumerController {@AutowiredProviderClient providerClient;@GetMapping("/callHello")public String callHello(){        String hello = providerClient.hello();        return "invoker provider :hello() ,result"+hello;}}

使用@Autoried注入ProviderClient接口,并直接调用它的方法即可5)启动类

@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class ConsumerStartApplication {public static void main(String[] args) {        SpringApplication.run(ConsumerStartApplication.class,args);}}

与生产者启动类中使用的注解完全一样,此处则表明允许消费者服务进行服务发现,并且可以使用Feign进行服务远程调用

当然,消费者只要提供了可以被调用的服务,它也当然可以是生产者,反之亦然

6)启动项目,查看nacos服务列表可以看到,nacos-consumer也已成功注册

04.消费者调用生产者

点击详情,可看到消费者的端口即为配置文件中配置的8877访问消费者服务:http://192.168.31.95:8877/callHello我们看到,调用成功,正常返回那么,到目前为止,我们就分别实现了服务生产者、服务消费者、以及消费者使用Feign成功调用生产者但这样貌似并没有体现出来注册中心的价值,我们知道,生产者服务只有一个实例时,跟消费者直接调用生产者的效果是差不多的。你想啊,这样明明就可以直接调用,为什么还一定要把我们都注册到其他地方,然后再进行调用呢 ?岂不是绕弯路了?

三 进阶

多节点调用

所以,注册中心的真正价值是体现在分布式集群的场景下的那,你想不想看看当生产者有两个节点的情况,它是如何调用的?继续,follow me~1)配置多节点服务首先,大家应该注意到了,nacos-provider的配置文件中的端口配置:

server:port: ${port:8860} #服务启动端口

使用${}的方式进行配置。这种格式表示,若启动时指定了端口,则以指定的端口启动,否则就以8860端口启动那么我们只需要在每次启动时分别配置不同端口,就可以实现启动N个服务,在IDEA中的话,我们可以通过以下方式进行配置2)分别启动服务3)查看管理端变化启动以后,查看管理端你会发现此时,nacos-provider的实例数变成了2,并且服务详情页面里面,显示了两个实例的具体信息这个时候,再次使用消费者进行调用,由于负载均衡算法默认是轮询方式,因此我们可以通过日志看到,两个生产者服务时轮流被调用的

四 总结

总而言之

关于Nacos,今天就先聊到这里,可能你会觉得 特别简单。是的,技术本来就是发展得越来越简单的,上次看到一个段子,说程序员现在每天的生活可轻松了,要实现个什么东西,网上直接找到一段代码,改吧改吧就好了,写代码还有好多自动补全,异常提醒等方便的辅助工具......哈哈,可能稍微有些许夸张,但确实有一定的道理啊,技术虽然革新比较快,但是网上的学习资料也越来越多,我们学习的途径也越来越多,当然,在同样的条件下,我们要是停止了学习的步伐,那么可能就要落后喽~看完本节,你一定在掌握了:1、什么是Nacos,如何实现Nacos注册中心2、如何实现Nacos客户端3、如何在IDEA中实现多模块项目4、如何实现feign的远程调用5、消费者如何实现多实例服务调用嗯,就这样。每天学习一点,时间会见证你的强大~下期预告:Spring Cloud(六):注册中心nacos-站在客户端角度

往期精彩回顾

Spring Cloud(四):公司内部,关于Eureka和zookeeper的一场辩论赛Spring Cloud(三):注册中心zookeeper-站在客户端角度Spring Cloud(二):在实战中深入zookeeper服务端机制Spring Cloud(一):我与导师的对话:你真的了解zookeeper吗?Spring Boot(十):注册中心Eureka-客户端视角Spring Boot(九):注册中心Eureka-服务端视角Spring Boot(八):Spring Boot的监控法宝:ActuatorSpring Boot(七):你不能不知道的Mybatis缓存机制!Spring Boot(六):那些好用的数据库连接池们Spring Boot(五):春眠不觉晓,Mybatis知多少Spring Boot(四):让人又爱又恨的JPASpring Boot(三):操作数据库-Spring JDBCSpringBoot(二):第一个Spring Boot项目SpringBoot(一):特性概览最近新建了一个微信交流群,里面都是真正对技术感兴趣的小伙伴,欢迎添加讨论~若群名片过期了,可以在后台回复进群,拉你入群哦~

也欢迎大家关注们的公众号,一起持续性学习吧~

nacos enablediscoveryclient_Spring Cloud(五):注册中心nacos篇相关推荐

  1. 【Spring Cloud】注册中心-Nacos

    1.名字的由来 前四个字母分别为 Naming 和 Configuration 的前两个字母,最后的 s 为 service 2.是什么 Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和 ...

  2. nacos 公共_SpringCloud配合注册中心Nacos的使用

    一.Nacos简介 Nacos核心提供的两个功能:服务注册与发现,动态配置管理. 1.服务注册与发现 Nacos提供基于DNS和基于RPC的服务发现,即能被用来支持https/http的服务注册与发现 ...

  3. gateway nacos注册服务_使用Nacos作为微服务注册中心和配置中心

    使用Nacos作为微服务注册中心和配置中心 一.技术简介 Nacos是阿里系开发的兼容Spring Cloud的服务注册中心组件,是微服务国产化的先驱.Nacos作为与Eureka的对比,不仅具有Eu ...

  4. 服务注册中心Nacos

    文章目录 一.服务注册中心Nacos最佳实践 1.Nacos注册中心简介 背景分析 Nacos概述 构建Nacos服务 初始化配置 服务启动与访问 2.服务注册与调用入门(重点) 业务描述 生产者服务 ...

  5. nacos 本地测试_Nacos注册中心落地实践

    前言 公司在19年开始推进同城双活架构,未来规划是在南汇机房出现故障时能把所有读流量切到宝山机房,这样至少保证读请求是没问题的;我们的微服务使用的zookeeper来做服务发现, zk由于它的强一致性 ...

  6. 微服务系列之ZooKeeper注册中心和Nacos注册中心Nacos和Zookeeper对比

    一.ZooKeeper注册中心 Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,推 ...

  7. 微服务注册中心 Nacos 实现原理详解!

    Nacos 架构 Provider APP:服务提供者 Consumer APP:服务消费者 Name Server:通过VIP(Virtual IP)或DNS的方式实现Nacos高可用集群的服务路由 ...

  8. 理解nacos 服务治理(注册中心)、Nacos简介、下载与配置持久化到Mysql

    Nacos简介 什么是Nacos Nacos致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流且管理. Nacos帮助您更敏 ...

  9. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

  10. 阿里注册中心nacos使用整合Dubbo-原创

    阿里注册中心nacos是今年开源的框架,一开始以为就是个zk.后面看了图才明白他对标的竟然是consul\eureka,最重要是完美支持dubbo.我想今年开源它也是别有用意 .(目前nacos0.7 ...

最新文章

  1. iphone系统更新 3002错误
  2. vue-router使用入门
  3. php处理微信返回xml数据,php将微信返回的xml格式转换成数组
  4. Spring框架入门基础,不可多得的干货
  5. Holt-Winters模型原理分析
  6. decltype判断变量或表达式类型
  7. 120分钟React快速扫盲教程
  8. python 输出list到txt_python脚本生成caffe train_list.txt的方法
  9. 第三季-第22课-网络协议分析
  10. Spring AOP动态代理原理与实现方式
  11. php微信公众号发送邮件,GitHub - DongDavid/notify: 消息发送组件-邮件、微信公众号、企业微信、小程序...
  12. Wsl2 Ubuntu18.04图形化界面,亲测成功
  13. 苹果手机滑动光标怎么设置_苹果手机移动的光标怎么设置出来
  14. unity.生成表示地图信息的二维数组_Unity3D 中生成任意形状3D Texture amp; 体积云...
  15. Hadoop安装及部署
  16. win7关闭交互式服务检测
  17. java的字典序排序_java字典序排序
  18. 操作系统服务器的安全性,服务器操作系统安全性
  19. Codeforces 348D Turtles LGV
  20. IMX6ULL移植LVGL

热门文章

  1. 101_Power Pivot DAX 累计至今,历史累计至今
  2. pythonpy文件打包成exe软件
  3. 手把手教你进行pip换源,让你的Python库下载嗖嗖的
  4. ASP.NET获取真正的客户端IP地址的6种方法
  5. 将您重定向的次数过多什么意思_忙忙碌碌将爱麻木是什么歌-所以会忙忙碌碌将爱麻木歌曲意思、出处、含义介绍...
  6. pytorch —— nn网络层 - 卷积层
  7. 拉氏变换法求解线性常微分方程(系统的零状态响应)
  8. 数据积分-牛顿科茨法与高斯勒让德法对比及示例
  9. C++/C--多个vector拼接的方法【转载】
  10. Ubuntu下常用命令总结