zuul 网关的用途_API网关服务组件Spring Cloud Zuul使用详解1(路由详解1:传统路由配置)...

序:基本介绍

1,什么是 Spring Cloud Zuul?

Zuul 是 Netflix 开源的微服务网关,可以和 Eureka、Ribbon、Hystrix 等组件配合使用。

Spring Cloud Zuul 是 Spring Cloud对 Zuul 进行了整合与增强实现的 API 网关组件。

Zuul 的主要功能是路由转发和请求过滤。

2,Spring Cloud Zuul 主要应用场景

动态路由:APP、web 网站通过 zuul 来访问不同的服务提供方,且与 ribbon 结合,还可以负载均衡的路由到同一个应用不同的实例中。

安全认证:zuul 作为互联网服务架构中的网关,可以用来校验非法访问、授予 token、校验 token 等。

限流:zuul 通过记录每种请求的类型来达到限制访问过多导致服务 down 掉的目的。

静态响应处理:直接在 zuul 就处理一些请求,返回响应内容,不转发到微服务内部。

区域弹性:主要是针对 AWS 上的应用做一些弹性扩展。

一、传统路由配置

1,基本介绍

所谓的传统路由配置方式就是在不依赖于服务发现机制的情况下,通过在配置文件中具体指定每个路由表达式与服务实例的映射关系来实现 API 网关对外不请求的路由。

由于没有 Eureka 等服务治理框架的帮助,我们需要根据服务实例的数量(单实例、多实例)采用不同方式的配置来实现路由规则,下面会通过样例分别进行介绍。

2,构建网关

(1)创建一个 基础的Spring Boot 工程,命名为api-gateway,并在pom.xml 中添加相关的依赖配置:

注意:对于 spring-cloud-starter-netflix-zuul 依赖,如果查看它的依赖内容可以发现,该模块除了包含Netiflix Zuul的核心依赖zuul-core之外,还包含下面这些网关服务需要的重要依赖:

spring-cloud-starter-netflix-hystrix:该依赖用来在网关服务中实现对微服务转发时候的保护机制,通过线程隔离和断路器,防止微服务的故障引发 API 网关资源无法释放,从而影响其他应用的对外服务。

spring-cloud-starter-netflix-ribbon:该依赖用来实现在网关服务进行路由转发时候的客户端负载均衡以及请求重试。

spring-boot-starter-actuator:该依赖用来提供常规的微服务管理端点。另外,在Spring Cloud Zuul中还特别提供了 /routes 端点来返回当前的所有路由规则。

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-netflix-zuul

org.springframework.cloud

spring-cloud-dependencies

Hoxton.RELEASE

pom

import

(2)接着在应用主类上添加@EnableZuulProxy 注解开启 Zuul 的 API 服务网关功能:

@SpringBootApplication

@EnableZuulProxy

public class ApiGatewayApplication {

public static void main(String[] args) {

SpringApplication.run(ApiGatewayApplication.class, args);

}

}

(3)最后在application.properties中配置 Zuul 应用的基础信息,如应用名、服务端口号等:

spring.application.name=api-gateway

server.port=5555

3,单实例路由转发配置

(1)单实例的路由转发通过 zuul.routes..path与 zuul.routes..url 参数对的方式进行配置:

比如下面配置实现了对符合 /my-service/**规则的请求路径转发到 http://localhost:8081/ 地址的路由规则

zuul.routes.my-service.path=/my-service/**

zuul.routes.my-service.url=http://localhost:8081/

(2)启动服务测试一下,当有一个请求http://localhost:5555/my-service/hello 被发送到API 网关上,根据匹配的规则,API 网关会转发请求到 http://localhost:8081/hello 地址:

(3)可以发现这个与我们直接访问目标地址的结果是一样的:

4,多实例路由转发配置

(1)多实例的路由转发通过zuul.routes..path 与zuul.routes..service-id 参数对的方式进行配置,其中service-id是由用户手工命名的服务名称,配合 ribbon.listOfServers参数实现服务与实例的维护:

比如下面配置实现了对符合/my-service/**规则的请求路径转发到http://localhost8081/和 http://localhost8082/两个实例地址的路由规则。

zuul.routes.my-service.path=/my-service/**

zuul.routes.my-service.service-id=my-service

my-service.ribbon.listOfServers=http://localhost:8081/,http://localhost:8082/

(2)启动服务测试一下,当多个请求http://localhost:5555/my-service/hello 被发送到 API 网关上,根据匹配的规则以及内置的Ribbon负载均衡策略,请求会被轮流转发到http://localhost:8081/和http://localhost:8082/ 这两个地址上:

附:访问 /routes 端点

(1)前面说过 spring-cloud-starter-netflix-zuul 内部还添加了 spring-boot-starter-actuator依赖,并且提供了 /routes端点来返回当前的所有路由规则。过该端口默认没有暴露出来,如果需要访问的话,可以通过如下配置将所有端点都暴露出来:

management.endpoints.web.exposure.include=*

(2)访问http://localhost:5555/actuator/routes边可以显示所有路由信息:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值