Spring Cloud入门实战(五) Zuul--构建微服务网关

本文介绍了Spring Cloud中Zuul作为微服务网关的作用,包括减少客户端与微服务交互复杂性、统一认证、监控等优势。详细讲解了Zuul的过滤器机制,如Inbound、Endpoint和Outbound Filters,并展示了如何编写Zuul网关,配置路由以及忽略特定路径。同时,文章涵盖了Zuul的路由配置,如自定义路径、忽略微服务和设置路由前缀等。

为什么微服务要使用网关

微服务的架构,属于比较细粒度的拆分,会根据业务拆分成很多个微服务,那么有可能一个用户下单,就需要 先调 用户微服务->商品微服务->支付微服务->订单微服务,这样才能完成一次购买商品的操作。如图。

在这里插入图片描述
这样的话,让客户端直接与各个微服务进行通信的话,会存在很多问题:

  • 客户端多次请求不同的微服务,增加客户端的复杂程度。
  • 存在跨域现象。
  • 认证复杂,每个微服务都需要单独认证。
  • 可重用性较差。重构困难。有可能要拆分某些微服务,重构起来就很麻烦。

所以,微服务给出了网关的解决方案。如图
在这里插入图片描述
网关封装了应用程序的内部结构,客户端只需要跟网关做交互就行,就不需要调用各个微服务的接口了。这样,开发就得到了简化,不仅如此,网关还有以下优点:

  • 易于监控。可在微服务网关收集并监控数据然后推送到外部系统进行分析。
  • 易于认证。可在微服务网关做一次认证,就不需要在每个微服务进行认证了。
  • 减少客户端和微服务交互次数。

Zuul 简介

Zuul是netflix开源的微服务网关,它具有以下功能:

  • 身份认证和安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。
  • 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
  • 动态路由:动态的将请求路由到不同的后端集群。
  • 压力测试:逐渐增加指向集群的流量以了解性能。
  • 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求。
  • 静态响应处理:在边缘位置直接建立部分响应,从而避免及转发到内部集群。
  • 多区域弹性:跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。

Zuul原理

过滤器就是Zuul业务逻辑的核心所在,这是他的运行流程。
在这里插入图片描述

zuul的过滤器

  • Inbound Filters:前置过滤器,在请求被路由之前调用。可以实现身份认证、记录调试信息等。
  • Endpoint Filter:路由过滤器,这种过滤器将请求直接路由到微服务,用于构建发送到微服务的请求。
  • Outbound Filters:路由到微服务之后执行。可以用来收集响应信息,将响应信息返给客户端。

实现自己的过滤器很简单,只要集成ZuulFilter,实现其中的一些方法即可。

Netty作为高性能异步网络通讯框架,如图zuul2.0使用netty server作为网关监听服务器监听客户端发来的请求,然后把请求转发到前置过滤器(inbound filters)进行处理,处理完毕后在把请求使用netty client代理到具体的后端服务器进行处理,处理完毕后在把结果交给后者过滤器(outbound filters)进行处理,然后把处理结果通过nettyServer写回客户端。

有兴趣的可以看看How-It-Works-2.0,也可以看看各种过滤器。

编写Zuul网关

首先新建一个服务 叫做 gateway-zuul。在pom文件中添加:

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值