第七章 API网关服务:Spring Cloud Zuul

本文深入探讨了API网关在微服务架构中的核心作用,详细讲解了其作为微服务系统门面的功能,包括请求路由、负载均衡、校验过滤等。并通过Spring Cloud Zuul实现了一个基础的API网关,展示了如何通过整合Spring Cloud Eureka进行服务实例的管理和维护,以及如何实现统一的安全校验和请求转发的熔断机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  API网关是一个更为智能的应用服务器, 它的定义类似于面向对象设计模式中的Facade模式, 它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端访问都需要经过它来进行调度和过滤。它除了要实现请求路由、 负载均衡、 校验过滤等功能之外, 还需要更多能力, 比如与服务治理框架的结合、 请求转发时的熔断机制、 服务的聚合等一系列高级功能

  首先,对千路由规则与服务实例的维护间题。 SpringCloud Zuul 通过与Spring Cloud Eureka进行整合, 将自身注册为Eureka服务治理下的应用, 同时从Eureka中获得了所有其他微服务的实例信息;其次, 对千类似签名校验、 登录校验在微服务架构中的冗余问题。 理论上来说, 这些校验逻辑在本质上与微服务应用自身的业务并没有多大的关系, 所以 它们完全可以独立成一个单独的服务存在, 只是它们被剥离和独立出来之后, 并不是给各个微服务调用, 而是在API网关服务上进行统一调用来对微服务接口做前置过滤, 以实现对微服务接口的拦截和校验

构建网关

创建一个基础的Spring Boot工程, 命名为api-gateway, 并在 pom.xml中引入spring-cloud-starter-zuul依赖, 具体如下

<parent> 
  <groupld>org.springframework.boot</groupid>
  <artifactld>spring-boot-starter-parent</artifacttd>
  <version>l.3.7.RELEASE</version> 
  <relativePath/> 
</parent> 
<dependencies> 
  <dependency> 
    <groupid>org.springframework.cloud</groupid> 
    <artifactld>spring-cloud-starter-zuul</artifactid> 
  </dependency> 
</dependencies> 
<dependencyManagement> 
  <dependencies> 
    <dependency> 
      <groupld>org.springframework.cloud</groupld> 
      <artifactid>spring-cloud-dependencies</artifactid> 
      <version>Brixton.SRS</version> 
      <type>pom</type> 
      <scope>import</scope>
    </dependency> 
  </dependencies> 
</dependencyManagement>

对于spring-cloud-starter-zuul依赖,该模块中不仅包含了Netflix Zuul的核心依赖 zuul-core,它还包含了下面这些网关服务需要的重要依赖:

  • spring-cloud-starter-hystrix: 该依赖用来在网关服务中实现对微服务转发时候的保护机制, 通过线程隔离和断路器,防止微服务的故障引发API网关资源无法释放, 从而影响其他应用的对外服务
  • spring-cloud-starter-ribbon:该依赖用来实现在网关服务进行路由转发时候的客户端负载均衡以及请求重试
  • spring-boot-starter-actuator:该依赖用来提供常规的微服务管理端点。 另外, 在Spring Cloud Zuul中还特别提供了/routes端点来返回当前的所有路由规则

创建应用主类, 使用@EnableZuulProxy注解开启Zuul的API网关服务功能

@EnableZuulProxy 
@SpringCloudApplication 
public class Application { 
public static void main(String[] args) { 
      new SpringApplicationBuilder(Application.class) .web(true) .run(args); 
    }
}

在application.properties中配置Zuul应用的基础信息, 如应用名、 服务端口号等, 具体内容如下:

spring.application.name=api-gateway 
server.port=5555

 

 

 

转载于:https://www.cnblogs.com/hzzjj/p/10263728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值