企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
在笔者的上一篇文章中,已经为大家介绍了nacos,并详细讲解了其单点模式和集群模式的搭建方法。本节就为大家介绍如何使用nacos作为服务注册中心。 > 本节我们将git本地代码版本回退到master分支eureka内容讲解完成之后,consul、zookeeper、apollo、Spring cloud config&Bus内容之前。 > ![](https://img.kancloud.cn/d6/f1/d6f1312204d1f2b2a8ef0fee7475463e_459x244.png) 也就是说我们使用Ribbon、OpenFeign作为远程调用的基础组件,然后**将eureka服务注册中心替换为nacos**。 ## 一、dongbb-cloud父项目依赖 因为nacos属于Spring Cloud Alibaba成员,为了规范相关版本与Spring Cloud、Spring Boot版本之间的兼容性,我们在父项目pom文件中引入`spring-cloud-alibaba-dependencies`。 > dependencyManagement的作用多次讲过了,通过dependencyManagement管理的dependency通常是多个子项目的父项目,我们通过import其pom信息,从而进行其子项目的版本号管理。一个父项目带多个子项目,父项目规定了子项目的版本号,从而个子项目之间的兼容性会更好。 ~~~ <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR3</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 在父项目中加入alibaba项目版本管理依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ~~~ 上面这部分内涵还是比较多的: * 在笔者书写这篇文章之时,spring cloud alibaba 已经正式在Spring Cloud社区孵化成功。孵化成功之后的版本是2.1.0版本,孵化成功之前是0.9.0版本,所以你再看到使用2.1.0以下的相关的spring cloud alibaba的文章基本都是过去式了。 * 另外一个显著的变化是:孵化之前的版本groupId是org.springframework.cloud,孵化之后的groupId是com.alibaba.cloud。这是因为Spring Cloud团队政策变化:非spring cloud内部团队维护的Spring Cloud子项目采用维护组织的groupId。 * 在dependencyManagement中我们维护了三个核心依赖项目的版本,这个版本号之间关系是Spring Cloud Alibaba官方推荐的,能够体现更好的兼容性。[spring-cloud-alibaba与spring-cloud和spring-boot之间的版本说明](https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E) | Spring Cloud Version | Spring Cloud Alibaba Version | Spring Boot Version | | --- | --- | --- | | Spring Cloud Hoxton.SR3 | 2.2.1.RELEASE | 2.2.5.RELEASE | | Spring Cloud Hoxton.RELEASE | 2.2.0.RELEASE | 2.2.X.RELEASE | | Spring Cloud Greenwich | 2.1.1.RELEASE | 2.1.X.RELEASE | | Spring Cloud Finchley | 2.0.1.RELEASE | 2.0.X.RELEASE | | Spring Cloud Edgware | 1.5.1.RELEASE | 1.5.X.RELEASE | ## 二、微服务整合nacos服务发现 * spring-cloud-starter-alibaba-nacos-discovery是spring-cloud-alibaba-dependencies子项目。所以它们的版本号都不需要我们手动维护,继承自父项目dependencyManagement中的定义。 * 因为我们之前使用了eureka,所以用nacos的spring-cloud-starter-alibaba-nacos-discovery将spring-cloud-starter-netflix-eureka-client在pom文件中替换掉 * spring-cloud-starter-alibaba-nacos-discovery也默认包含了spring-cloud-starter-netflix-ribbon,不需要单独引入。我们之前学习的所有的ribbion和openfeign相关的负载均衡、远程服务调用的知识在nacos下依然适用。 ~~~ <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ~~~ 在application.yml中加入必要的服务注册中心信息配置我们上一篇文章中搭建的nacos的服务注册中心的地址192.168.161.6:8848。(删掉eureka配置) ~~~ spring: cloud: nacos: discovery: server-addr: 192.168.161.6:8848 ~~~ 加上EnableDiscoveryClient注解(去掉EnableEurekaClient注解),开启Spring Cloud的服务注册与发现功能。 ![](https://img.kancloud.cn/06/85/0685b374ed6f18889347c6fa04dfc780_1212x333.png) 在aservice-sms服务提供者和aservice-rbac服务调用者中将以上的三个动作完成,我们就成功的将eureka客户端替换为nacos-discovert客户端了。我们访问nacos服务,通过服务管理->服务列表,看到我们注册的服务已经在列表中。 ![](https://img.kancloud.cn/00/71/00710ccd1512577d68990a8dff19a1c7_1887x311.png) ## 四、结果验证 服务注册成功了,剩下的就是服务之间实现远程调用的实现及测试了。Ribbon和OpenFeign现在已经做到了服务注册中心的无关性,也就是说:不论你用nacos、zookeeper、consul、eureka哪一个服务注册中心,OpenFeign和Ribbon的使用方式几乎都没有区别。 * 简单的实现例子参考:《Hello-microservice》中《第一个微服务调用》 * 深入理解学习参考:《远程服务调用》那一章 > 需要注意的是:我们使用openfeign进行远程服务调用,服务名称应该是和spring.applicatopn.name定义一致的。(这点与Eureka不同,eureka是将服务名称转成大写字母) ~~~ //@FeignClient("ASERVICE-SMS") @FeignClient("aservice-sms") public interface SmsService { @PostMapping(value = "/sms/send") AjaxResponse send(@RequestParam("phoneNo") String phoneNo, @RequestParam("content") String content); } ~~~