当前位置: 首页 > news >正文

Nacos 服务注册发现案例:nacos-spring-cloud-example 详解

Nacos官网:Nacos 融合 Spring Cloud,成为注册配置中心 | Nacos 官网 

一、结构说明:基于Spring Cloud Alibaba的微服务示例,包含两个主要模块

nacos-spring-cloud-consumer-example : 服务消费者

nacos-spring-cloud-provider-example :    服务提供者

二、技术栈:Spring Boot+Spring Cloud+Spring Cloud Alibaba Nacos + OpenFeign(用于服务调用)+ Spring Cloud LoadBalancer(负载均衡)

三、使用环境

安装nacos参考:Nacos 安装配置步骤详解_nacos:2.5.1 mysql-CSDN博客

  • 安装Nacos服务(nacos-server-2.5.1)
  • 确保JDK17环境(根据pom.xml中的配置)
  • Maven环境 3.6.3 +

四、项目结构示例:

五、代码说明:

(1):nacos-spring-cloud-example----父pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.alibaba.nacos</groupId><artifactId>nacos-spring-cloud-example</artifactId><packaging>pom</packaging><version>0.2.0-SNAPSHOT</version><modules><module>nacos-spring-cloud-provider-example</module><module>nacos-spring-cloud-consumer-example</module></modules><properties><spring-boot.version>3.0.2</spring-boot.version><spring-cloud.version>2022.0.0</spring-cloud.version><spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencyManagement><dependencies><!-- Spring Boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!-- Spring Cloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- Spring Cloud Alibaba --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
</project>

(2):服务提供者 nacos-spring-cloud-provider-example 

   1、添加依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>nacos-spring-cloud-example</artifactId><groupId>com.alibaba.nacos</groupId><version>0.2.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>nacos-spring-cloud-provider-example</artifactId><dependencies><!-- Spring Boot Web 启动器提供 Web 开发相关的依赖,包含:- 内嵌的 Tomcat 服务器- Spring MVC 框架- RESTful 支持--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Nacos 服务注册与发现依赖提供服务注册到 Nacos 的能力,包含:- 服务注册- 服务发现- 服务健康检查--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- Nacos 客户端依赖提供与 Nacos 服务器通信的基础能力,包含:- 服务器通信- 配置管理- 服务管理--><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17</target></configuration></plugin></plugins></build>
</project>
2、配置服务提供者,从而服务提供者可以通过 Nacos 的服务注册发现功能将其服务注册到 Nacos server 上

在 application.properties 中配置 Nacos server 的地址:

server:port: 8070
spring:application:name: service-provider           #服务名cloud:nacos:discovery:server-addr: localhost:8848  # Nacos服务地址namespace: public            # 如果非默认命名空间,需明确指定group: DEFAULT_GROUP         # 如果使用自定义分组
3、启动类添加:@EnableDiscoveryClient注解 开启服务注册发现功能
package com.alibaba.nacos.example.spring.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:* 将服务注册到 Nacos 注册中心* 允许服务被其他服务发现和调用* 自动配置服务注册相关的组件*/
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {public static void main(String[] args) {SpringApplication.run(NacosProviderApplication.class, args);}
}
4、 创建一个serviceController :服务者接口
package com.alibaba.nacos.example.spring.cloud;import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/service")
public class serviceController {@GetMapping(value = "/echo/{str}")public String echo(@PathVariable String str) {return "Hello Nacos Discovery " + str;}
}

(3):服务消费者 nacos-spring-cloud-provider-example 

   1、添加依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>nacos-spring-cloud-example</artifactId><groupId>com.alibaba.nacos</groupId><version>0.2.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>nacos-spring-cloud-consumer-example</artifactId><dependencies>
<!-- Spring Boot Web 启动器提供 Web 开发相关的依赖,与提供者相同--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- OpenFeign 依赖提供声明式的服务调用能力,包含:- 服务接口代理- HTTP 客户端封装- 服务调用--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- Spring Cloud LoadBalancer 依赖提供负载均衡能力,包含:- 客户端负载均衡- 服务实例选择策略- 替代了旧版本的 Ribbon--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId><version>3.1.9</version></dependency><!-- Nacos 服务注册与发现依赖与提供者相同,用于:- 服务发现- 服务列表获取- 服务健康检查--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies><build><plugins><!-- Spring Boot Maven 插件用于构建可执行的 Spring Boot 应用,提供:- 打包成可执行 jar- 包含所有依赖- 提供运行时支持--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><!-- Maven 编译插件指定 Java 编译版本,设置:- 源代码兼容性级别- 目标字节码级别- 这里使用 Java 17--><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17</target></configuration></plugin></plugins></build>
</project>
2、配置服务消费者,从而服务消费者可以通过 Nacos 的服务注册发现功能从 Nacos server 上获取到它要调用的服务

在 application.properties 中配置 Nacos server 的地址:

server:port: 8080
spring:application:name: service-consumer           #服务名cloud:nacos:discovery:server-addr: localhost:8848  # Nacos服务地址namespace: public            # 如果非默认命名空间,需明确指定group: DEFAULT_GROUP         # 如果使用自定义分组openfeign:  #超时控制client:config:default: # 全局配置connectTimeout: 3000  # 连接超时(毫秒)readTimeout: 5000    # 读取超时service-provider: # 针对特定服务readTimeout: 10000
3、启动类添加:@EnableFeignClients 注解------启用 Feign 客户端
package com.alibaba.nacos.example.spring.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;/*** @EnableFeignClients 在消费者中主要用于:* 发现其他服务* 获取服务列表* 实现负载均衡* OpenFeign 是 Spring Cloud 提供的 声明式 HTTP 客户端,通过接口和注解即可定义远程服务调用,底层自动集成负载均衡(如 Ribbon/Nacos)*/
@SpringBootApplication
@EnableFeignClients(basePackages = "com.alibaba.nacos.example.spring.cloud")  // 启用 OpenFeign
public class NacosConsumerApplication {public static void main(String[] args) {SpringApplication.run(NacosConsumerApplication.class, args);}
}
4、创建EchoService---定义 Feign 客户端接口
package com.alibaba.nacos.example.spring.cloud;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;/*** OpenFeign 是 Spring Cloud 提供的 声明式 HTTP 客户端,用于简化微服务间的远程调用。开发者只需定义接口并添加注解,* OpenFeign 会自动生成实现类并处理 HTTP 请求,使远程调用像本地方法调用一样简单* 定义 Feign 客户端*/
@FeignClient(name = "service-provider") // 指定服务名 :就是服务提供者spring:application:name: service-provider
public interface EchoService {@GetMapping(value = "/service/echo/{str}") // 与服务提供者的接口一致,包括接口名public String echo(@PathVariable("str") String str); //特别注意如果有参数,别忘了带参数注解
}
5、 创建一个consumerController :消费者者接口: 调用远程服务
package com.alibaba.nacos.example.spring.cloud;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 调用远程服务*/
@RestController
@RequestMapping("/consumer")
public class consumerController {@Autowiredprivate EchoService echoService;@GetMapping("/call/{msg}")public String call(@PathVariable String msg) {return echoService.echo(msg);  // 像调用本地方法一样}
}

(4):测试流程

1、启动Nacos服务:
2、启动服务提供者:启动成功:nacos服务中心---自动注册到服务列表

访问提供者服务的接口成功返回

3、启动服务消费者:启动成功:nacos服务中心---自动注册到服务列表

访问消费者接口,其实就是OpenFeign 远程服务调用消费者的接口,返回成功

 

执行消费者接口后:服务提供者被订阅,在订阅者列表中可查看,也就是说这个接口被订阅

相关文章:

  • Django实现文件上传
  • 数据结构 -- 树相关面试题
  • 网络出版服务许可证年检
  • go实例化结构体的方式
  • 无法发布到PowerBI?试试拆分它
  • 天数计算卡 报错和解决记录
  • 玻纤效应的时序偏差
  • 有无D6完全是两个强度的主角——以撒(Isaac)
  • 基于Springboot + vue3实现的图书管理系统
  • 时间序列预测算法中的预测概率化笔记
  • Tesseract 字库介绍与训练指南
  • 【案例95】“小”问题引发的“大”发现---记一次环境修复
  • RTOS 完整概述与实战应用:从基础原理到产业实情
  • 从技术到实践:ArcGIS 与 HEC-RAS 解析洪水危险性及风险评估
  • 帕累托前沿(Pareto Frontier)
  • Allegro X PCB设计小诀窍--07.如何在Allegro X中进行3D布局DRC
  • C++修炼:map和set的封装
  • Echarts实现3D地图(多层geo)同步缩放
  • 什么是可视化组态软件? 主流可视化组态软件有哪些?
  • [C]基础16.数据在内存中的存储
  • 微网站 留言板/廊坊网站建设优化
  • 沈阳网站排名工具/短视频推广引流方案
  • 办公空间设计要素/武汉seo优化顾问
  • 网站开发绩效考核与薪酬/今天晚上19点新闻联播直播回放
  • 怎么制作网站图片不显示/北京seo顾问服务公司
  • 怎么建设一个电影网站/今日腾讯新闻最新消息