首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 是什么推动了单体应用到微服务架构的演进?
02 | 微服务全家桶:走进 Spring Cloud 的世界
03 | 初窥门径:我们要搭建一个怎样的微服务实战项目?
04 | 十八般兵器:如何搭建项目所需的开发环境?
05 | 牛刀小试:如何搭建优惠券模板服务?
06 | 牛刀小试:如何搭建优惠券计算服务和用户服务?
07 | Nacos体系架构:什么是服务治理?
08 | 服务治理:Nacos集群环境搭建
09 | 集成 Nacos:如何将服务提供者注册到 Nacos 服务器?
10 | 集成 Nacos:如何通过服务发现机制向服务提供者发起调用?
11 | Loadbalancer 实战:通过自定义负载均衡策略实现金丝雀测试
12 | OpenFeign:服务间调用组件 OpenFeign 是怎么“隔空取物”的?
13 | OpenFeign 实战:如何实现服务间调用功能?
14 | OpenFeign 实战:OpenFeign 组件有哪些高级玩法?
15 | 配置中心在微服务中发挥着怎样的作用?
16 | 如何集成 Nacos Config 实现配置项动态刷新?
17 | Sentinel 体系结构:什么是服务容错(降级熔断、流量整形)?
18 | Sentinel 实战:如何实施流量整形与限流策略?
19 | Sentinel 实战:如何为项目添加异常降级方案?
20 | Sentinel 实战:如何接入 Nacos 实现规则持久化?
21 | Sleuth 体系架构:为什么微服务架构需要链路追踪?
22 | 调用链追踪:集成 Sleuth 和 Zipkin,实现链路打标
23 | 调用链追踪:如何通过 ELK 实现日志检索?
24 | 为什么微服务架构少不了微服务网关?
25 | 微服务网关:Gateway 中的路由和谓词有何应用?
26 | 微服务网关:如何设置请求转发、跨域和限流规则?
27 | 微服务网关:如何借助 Nacos 实现动态路由规则?
28 | 消息驱动:谁说消息队列只能削峰填谷?
29 | 消息驱动:如何集成 Stream 实现消息驱动?
30 | 消息驱动:如何高效处理 Stream 中的异常?
31 | 消息驱动:如何通过 RabbitMQ 插件实现延迟消息?
32 | Alibaba Seata 框架:什么是分布式事务?
33 | 分布式事务:搭建 Seata 服务器
34 | 分布式事务:使用 Nacos+Seata 实现AT模式
35 | 分布式事务:使用 Nacos+Seata 实现 TCC 补偿模式
36 | 说透微服务 | 什么是主链路规划?
当前位置:
首页>>
技术小册>>
Spring Cloud微服务项目实战
小册名称:Spring Cloud微服务项目实战
### 第十章 集成 Nacos:如何通过服务发现机制向服务提供者发起调用 在微服务架构中,服务发现是一个至关重要的组件,它允许服务消费者动态地发现和调用服务提供者,无需硬编码服务地址。Nacos 作为阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,近年来在微服务领域得到了广泛应用。本章将详细介绍如何在 Spring Cloud 项目中集成 Nacos 以实现服务的注册与发现,并展示如何通过服务发现机制向服务提供者发起调用。 #### 10.1 Nacos 简介 Nacos(Dynamic Naming and Configuration Service)是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它致力于帮助开发者更快速、更稳定地构建以微服务架构为核心的应用系统。Nacos 支持多种注册中心协议(如 Dubbo、gRPC、HTTP、REST、gRPC-over-HTTP、OpenAPI、gRPC over Thrift 等)和服务框架,以及跨语言的服务消费者和提供者。 #### 10.2 Spring Cloud 与 Nacos 集成基础 在 Spring Cloud 中集成 Nacos 主要涉及两个关键组件:`spring-cloud-starter-alibaba-nacos-discovery` 用于服务的注册与发现,`spring-cloud-starter-alibaba-nacos-config` 用于配置管理(本章主要聚焦于服务发现)。 ##### 10.2.1 添加依赖 首先,你需要在你的 Spring Boot 项目中添加 Nacos Discovery 的依赖。如果你使用的是 Maven,可以在 `pom.xml` 文件中添加如下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>你的Nacos Starter版本</version> </dependency> ``` 请确保替换 `你的Nacos Starter版本` 为当前最新的稳定版本。 ##### 10.2.2 配置 Nacos 接下来,你需要在 `application.properties` 或 `application.yml` 中配置 Nacos 服务器的地址以及服务的基本信息。例如,使用 YAML 格式的配置可能如下所示: ```yaml spring: application: name: your-service-name # 应用名称,用于服务注册与发现 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 # Nacos 服务器地址 namespace: your-namespace-id # 命名空间ID,可选 cluster-name: default # 集群名称,默认为 default ``` #### 10.3 服务注册与发现 一旦你的应用配置好 Nacos,并启动应用,Spring Cloud 将自动将你的应用注册到 Nacos 服务器上。此时,你可以在 Nacos 的控制台看到服务的注册信息,包括服务名称、IP 地址、端口号等。 ##### 10.3.1 服务注册 服务注册过程对用户来说是透明的,由 Spring Cloud Nacos Discovery 自动完成。当应用启动时,它会向 Nacos 发送注册请求,包含服务的基本信息,如服务名、元数据等。 ##### 10.3.2 服务发现 服务消费者(即需要调用其他服务的服务)可以通过 Nacos 的服务发现机制来发现服务提供者。Spring Cloud 提供了多种方式来支持服务发现,包括但不限于使用 `RestTemplate`、`Feign` 客户端等。 #### 10.4 使用 RestTemplate 调用服务 `RestTemplate` 是 Spring 提供的一个用于同步客户端HTTP请求的模板工具类。结合 Spring Cloud 的服务发现机制,你可以轻松地通过服务名来调用服务,而无需知道服务的具体地址。 ##### 10.4.1 启用服务发现 确保你的服务消费者已经通过 `spring-cloud-starter-alibaba-nacos-discovery` 依赖启用了服务发现。 ##### 10.4.2 配置 RestTemplate 你可以通过自定义 `RestTemplate` 的方式来集成服务发现。Spring Cloud 提供了 `LoadBalancerClient` 接口的实现,用于在请求时动态解析服务地址。 ```java @Configuration public class RestClientConfig { @Bean @LoadBalanced // 启用负载均衡 public RestTemplate restTemplate() { return new RestTemplate(); } } ``` ##### 10.4.3 调用服务 在服务消费者的代码中,你可以直接使用服务名来构造 URL,`RestTemplate` 会自动通过服务发现机制解析出实际的服务地址。 ```java @Autowired private RestTemplate restTemplate; public String callService() { String url = "http://your-service-name/your-endpoint"; ResponseEntity<String> response = restTemplate.getForEntity(url, String.class); return response.getBody(); } ``` 这里 `your-service-name` 是你在 Nacos 中注册的服务名,`your-endpoint` 是你想要调用的具体端点。 #### 10.5 使用 Feign 客户端调用服务 `Feign` 是一个声明式的 Web 服务客户端,它使得写 HTTP 客户端变得更简单。你可以使用 Feign 来创建一个接口并使用注解来配置它,然后就像调用本地方法一样调用远程服务。 ##### 10.5.1 添加依赖 首先,确保你的项目中包含了 Feign 的依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>你的Feign Starter版本</version> </dependency> ``` ##### 10.5.2 启用 Feign 在你的主类或配置类上添加 `@EnableFeignClients` 注解来启用 Feign 客户端。 ```java @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` ##### 10.5.3 创建 Feign 客户端 定义一个 Feign 客户端接口,并使用 `@FeignClient` 注解来指定服务名。 ```java @FeignClient(name = "your-service-name") public interface YourServiceClient { @GetMapping("/your-endpoint") String callEndpoint(); } ``` ##### 10.5.4 调用服务 现在,你可以像注入普通 Bean 一样注入 `YourServiceClient`,并直接调用其方法,Feign 会自动处理服务发现、负载均衡和 HTTP 请求的发送。 ```java @Autowired private YourServiceClient yourServiceClient; public String callService() { return yourServiceClient.callEndpoint(); } ``` #### 10.6 负载均衡与容错处理 Nacos 集成到 Spring Cloud 后,还可以利用 Ribbon 或 Spring Cloud LoadBalancer(取决于你的 Spring Cloud 版本)来实现客户端负载均衡。同时,可以结合 Hystrix 或 Resilience4j 等库来实现服务的容错处理,如服务降级、熔断等。 #### 10.7 总结 通过本章的学习,你应该已经掌握了如何在 Spring Cloud 项目中集成 Nacos 以实现服务的注册与发现,以及如何使用 `RestTemplate` 和 `Feign` 客户端通过服务发现机制向服务提供者发起调用。Nacos 的引入大大简化了微服务架构下的服务管理,使得服务间的调用更加灵活和可靠。在未来的微服务项目中,你可以根据实际需要选择适合的服务发现和调用方式,以提高系统的可维护性和可扩展性。
上一篇:
09 | 集成 Nacos:如何将服务提供者注册到 Nacos 服务器?
下一篇:
11 | Loadbalancer 实战:通过自定义负载均衡策略实现金丝雀测试
该分类下的相关小册推荐:
Java语言基础6-面向对象高级
Java语言基础7-Java中的异常
Java语言基础13-类的加载和反射
Java面试指南
Java并发编程
Mybatis合辑4-Mybatis缓存机制
Java语言基础15-单元测试和日志技术
Java语言基础8-Java多线程
Java并发编程实战
深入理解Java虚拟机
Java性能调优实战
Mybatis合辑3-Mybatis动态SQL