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

【springcloud微服务】SpringCloudAlibaba整合Nacos实战

目录一、前言二、常用服务

目录

一、前言

二、常用服务注册中心介绍

2.1 dubbo服务注册示意图

2.2 常用注册中心对比

三、nacos介绍

3.1  什么是nacos

3.2 nacos 特点

3.3 nacos生态链地图

四、nacos部署

4.1 下载安装包

4.2 修改脚本启动模式

4.3  启动nacos 服务

五、Spring Cloud Alibaba 整合Nacos

5.1  Spring Cloud Alibaba版本选型

5.2  实验整合案例说明

5.3  整合完整过程

5.3.1 创建聚合工程,包括两个子模块

5.3.2 根pom引入如下依赖

5.3.3 子模块导入如下依赖

5.3.4 工程配置文件

5.3.5 stock模块提供一个扣减库存接口

5.3.6 order模块提供一个下单接口

5.3.7 工程启动类

5.3.8 order模块添加配置类

5.4  模拟测试

5.4.1 启动服务

5.4.2 接口模拟调用

 六、写在最后



一、前言

近些年,随着微服务框架在越来越多的公司产品中实践落地,以Spring Cloud Alibaba为导向的一站式微服务解决方案也成为微服务实践和运用的风向标,Spring Cloud Alibaba提供了越来越完善的各类微服务治理组件,比如分布式服务配置与注册中心nacos,服务限流、熔断组件sentinel等,本篇先来介绍nacos的详细使用。


二、常用服务注册中心介绍

为什么需要注册中心呢?简单来说,随着微服务的个数增多,规模增大,再向以往那样,两个微服务之间直接通过拼接完整的请求url调用的话,微服务的维护成本将是巨大的,也不便于后续微服务的API统一治理。

事实上,微服务化的目的就是为了减少服务间的紧密耦合,同时,一定程度上减少服务与服务之间调用时更多的信息暴露,更直接点来说,就是说服务与服务之间的调用应该是去中心化的调用,而注册中心的好处就是为了达到此目的,注册中心提供了一种服务与服务之间互相发现的机制,通过注册中心,微服务提供的各类服务资源可以被统一纳管,进行集中式管理,这就是注册中心的好处。


2.1 dubbo服务注册示意图

下面是dubbo核心的经典的服务注册与调用示意图,其服务治理的核心就是注册中心:Registry的存在。

 


2.2 常用注册中心对比

下图列举了常用的几种分布式配置中心各个功能的对比,其他更多的配置中心,像eureka,zk,consul等也是可以使用的,具体可结合实际场景进行选择;

从上面的表的数据对比来看,springcloud alibaba为了更好的治理和打造自身的微服务生态体系,最终选择了自研的nacos,nacos即是分布式服务注册中心,同时也可以作为分布式配置中心使用,而且基于界面可视化操作客户端,提供了完善的治理方案。


三、nacos介绍

3.1  什么是nacos


一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。

 官网地址: 官网地址  ;  github地址:nacos git地址


3.2 nacos 特点


nacos的主要特点如下:


  • 服务发现和服务健康监测;
  • 动态配置服务;
  • 动态 DNS 服务;
  • 服务及其元数据管理;

简而言之

nacos 用于管理所有微服务、解决微服务之间调用关系错综复杂、难以维护的问题;



3.3 nacos生态链地图

下图详细介绍了nacos的生态,优势,业务,架构等多维度的全景图,由此可见,作为springcloud-alibaba微服务生态体系下的一款组件,其位置是非常重要的。





四、nacos部署

nacos在单机环境下安装部署非常简单,只需要下载好安装包之后,执行bin目录下的启动脚本即可快速启动服务,下面是完整的流程。


4.1 下载安装包

安装包下载地址:各版本下载地址

也可以根据自身的需要选择合适的版本下载使用;

 选择完版本后,可以选择linux或者windows环境的安装包下载即可;

 这里选择了zip压缩包


4.2 修改脚本启动模式

nacos启动脚本里面提供了集群模式和单机模式启动两种方式,由于本机搭建使用,选用单机模式即可,修改启动脚本中如下的关键参数;

 

4.3  启动nacos 服务

修改并保存脚本之后,双击启动服务

 

启动成功之后,按上图中地址访问nacos的客户端控制台,默认登录用户名和密码:nacos/nacos

 登录成功后,看到如下的控制台界面;

 


五、Spring Cloud Alibaba 整合Nacos

在真正进行代码整合之前,一定要弄清springloud alibaba版本选择的事情,很多同学在这里由于没弄清springloud alibaba与springboot的版本依赖,兼容性导致在整合过程中遇到较多的问题;


5.1  Spring Cloud Alibaba版本选型

下面摘取git中关于各个版本选型的详细对照,git地址:各版本依赖关系地址,最重要的就是springboot的版本与Spring Cloud Alibaba 版本的依赖关系;


5.2  实验整合案例说明

需求说明

1、创建两个微服务,order(订单)微服务,和stock(库存)微服务;

2、将两个微服务注册到nacos,通过nacos实现order服务对stock服务的调用;


5.3  整合完整过程


5.3.1 创建聚合工程,包括两个子模块


5.3.2 根pom引入如下依赖

有更多需要管理的jar,统一在dependencyManagement中加入即可;

UTF-81.81.81.2.17org.springframework.bootspring-boot-dependencies2.2.2.RELEASEpomimportorg.springframework.cloudspring-cloud-dependenciesHoxton.SR1pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies2.1.0.RELEASEpomimportorg.springframework.bootspring-boot-maven-plugin

5.3.3 子模块导入如下依赖

这里暂时只需要导入springboot-web以及nacos的客户端即可;

org.springframework.bootspring-boot-starter-webcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery

5.3.4 工程配置文件

stock模块配置文件

server:port: 8085spring:application:name: stock-servicecloud:nacos:discovery:server-addr: localhost:8848 #服务注册中心地址#config:#server-addr: localhost:8848 #配置中心地址

order模块配置文件

server:port: 8083spring:application:name: order-servicecloud:nacos:discovery:server-addr: localhost:8848 #服务注册中心地址#config:#server-addr: localhost:8848 #配置中心地址service-url:nacos-user-service: http://stock-service

5.3.5 stock模块提供一个扣减库存接口

在stock模块中添加一个扣减库存的接口,给下单接口使用

@RestController
@RequestMapping("/stock")
public class StockController {@GetMapping("/reduct")public String reduct(){System.out.println("扣减库存");return "扣减库存";}}


5.3.6 order模块提供一个下单接口

@RestController
@RequestMapping("/order")
public class OrderController {@AutowiredRestTemplate restTemplate;@Value("${service-url.nacos-user-service}")private String serverURL;//localhost:8083/order/add@GetMapping("/add")public String add(){System.out.println("下单成功");//String forObject = restTemplate.getForObject("http://localhost:8082/stock/reduct", String.class);String forObject = restTemplate.getForObject(serverURL + "/stock/reduct", String.class);System.out.println(forObject);return "add order :" + forObject;}}

5.3.7 工程启动类

两个模块的启动类上面都加上@EnableDiscoveryClient 注解

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

5.3.8 order模块添加配置类

由于spring-cloud-starter-alibaba-nacos-discovery默认集成的是Ribbon,我们知道Ribbon是基于客户端的负载均衡实现,所以这里的LoadBalancerClient的实现类是RibbonLoadBalancerClient,由Ribbon实现对RestTemplate的负载均衡,在当前的两个工程模块中,order作为客户端,所以需要在order模块中添加一个RestTemplate的配置类,并使用LoadBalanced注解进行修饰;

@Configuration
public class RestConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}}


5.4  模拟测试


5.4.1 启动服务

启动nacos,然后依次启动stock服务,order服务,在工程启动的时候,注意下面的关键信息,说明服务注册到了nacos;

启动完成之后,再次检查nacos的服务列表,可以发现上面正是两个工程的服务名;

 

5.4.2 接口模拟调用

浏览器调用order模块的下单接口:localhost:8083/order/add,看到如下效果,说明通过nacos实现对微服务的调用就成功了

 六、写在最后

在微服务架构的设计中,springcloud-alibaba作为一站式解决方案提供者,其每一个组件设计的背后都有着不错的思考和值得学习探究的地方,拿nacos来说,作为后起之秀,却能同时兼具注册中心和配置中心两用,有兴趣的同学可以撸一下源码,可能会有更多的收获。





















推荐阅读
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 学习笔记(34):第三阶段4.2.6:SpringCloud Config配置中心的应用与原理第三阶段4.2.6SpringCloud Config配置中心的应用与原理
    立即学习:https:edu.csdn.netcourseplay29983432482?utm_sourceblogtoedu配置中心得核心逻辑springcloudconfi ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
author-avatar
狮子座YAO
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有