当前位置: 首页 > 编程笔记 >

详解Spring Cloud Zuul 服务网关

杨超
2023-03-14
本文向大家介绍详解Spring Cloud Zuul 服务网关,包括了详解Spring Cloud Zuul 服务网关的使用技巧和注意事项,需要的朋友参考一下

有了Eureka服务注册发现、Hystrix断路器、Ribbon服务调用负载均衡,以及spring cloud config 集群配置中心,似乎一个微服务框架已五脏俱全,last but not least,一个服务网关却不可或缺。

Spring Cloud Zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全等的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。

Zuul介绍

在整个Spring Cloud微服务框架里,Zuul扮演着”智能网关“的角色。一方面,Zuul是接入网关,起到反向代理的作用,是外部消费者请求内部服务的唯一入口。另一方面,Zuul也具备过滤功能,通过在运行时注入过滤规则可实现用户鉴权、动态路由、灰度发布、A/B测试、负载限流等功能。

Zuul的大部分功能都是通过过滤功能来完成的,Zuul可以提供四种标准类型的过滤,如下图所示:

1) Pre: 过滤规则在路由之前起作用。可以利用“Pre”过滤器实现用户鉴权,记录请求日志等;

2) Routing:过滤规则在路由时发生作用。可以利用“Routing”过滤器实现动态路由、灰度发布、A/B测试、负载限流等。

3) Post:过滤规则在路由之后发生作用。可以利用"Post"过滤器收集统计信息和指标,将微服务的相应写入Http响应并返回给服务消费者;

4) Error:过滤规则路由过程中发生错误时发生作用。可以利用Error过滤器记录错误日志,并对错误进行二次处理等。

在过滤器之间用RequestContext传递消息。RequestContext存储的内容包括路由目标地址、错误信息、请求信息、响应信息等。Zuul的过滤规则也可以用基于JVM的语言编写,包括Java、Python、Groovy等。

一、Zuul 实例

在上篇demo创建好注册中心、服务提供方的基础之上,再来演示一下zuul网关服务

1、创建网关类 

@EnableZuulProxy 
@SpringCloudApplication  
//整合@SpringBootApplication、@EnableDiscoveryClient、@EnableCircuitBreaker 
public class ZuulApplication { 
 
  public static void main(String[] args) { 
    new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args); 
  } 
} 

2、添加properties配置文件

spring.application.name=api-gateway 
server.port=5555 
 
zuul.routes.api-a.path=/api-a/** 
zuul.routes.api-a.serviceId=compute-service 
 
zuul.routes.api-b.path=/api-b/** 
zuul.routes.api-b.serviceId=compute-service 
 
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/ 

同样也指向eureka服务注册中心地址,api-a.serviceId,b-serviceId 指向服务提供者名称

3、访问效果

原来直接通过http://COMPUTE-SERVICE/add?a=10&b=20链接直接访问compute-service服务实例,现在则可直接localhost:5555/api-a/add?a=1&b=2网关地址访问compute-service服务。同样zuul网关也提供服务负载均衡功能,将请求均发到service服务实例。

二、什么是网关?为何需要使用网关?

通过上图,对外提供的服务,在无网关的情况下,API接口直接暴露给服务调用方,当调用方增多,不同业务调用方各不相同,势必需要添加定制化访问权限、校验等逻辑。当添加API网关后,再第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端,正如无需直接访问compute-service的add方法,而是通过api-a/add链接将请求传递给service实例。Zuul就是提供负载均衡-反向代理-权限认证的这么一个API gateway。

类似于Nginx在应用服务最前端添加一堵保护墙,zuul的负载均衡是针对将请求分发给集群中某台服务或者某个服务实例。而前面介绍过的ribbon也是主打服务负载功能,它所针对的是服务消费者将调用请求分发到某具体服务提供实例。两者均做负载均衡,实际是在系统不同的层级上进行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍详解基于docker搭建lanproxy内网穿透服务,包括了详解基于docker搭建lanproxy内网穿透服务的使用技巧和注意事项,需要的朋友参考一下 文档更新说明 2018年04月06日 v1.0 内网穿透相信是后端开发者经常遇到的需求,可是怎么实现呢?其实有现成的服务:花生壳、ngrok等,但是,最近花生壳宣布,免费版的内网穿透将不支持80端口映射了,而免费版的ngrok也不够

  • 本文向大家介绍详解Java 微服务架构,包括了详解Java 微服务架构的使用技巧和注意事项,需要的朋友参考一下 一、传统的整体式架构 传统的整体式架构都是模块化的设计逻辑,如展示(Views)、应用程序逻辑(Controller)、业务逻辑(Service)和数据访问对象(Dao),程序在编写完成后被打包部署为一个具体的应用。如图所示: 系统的水平扩展 如果要对系统进行水平扩展,通常情况下,只需要

  • BeX5消息服务详解(V3.2.1)视频: 视频:https://pan.baidu.com/s/1sls5c9B 配置 1.\conf\server.xml中 <mqtt-server>tcp://localhost:1883</mqtt-server>  配置消息服务地址 <external-address>http://demo.justep.cn</external-address>配置应

  • BeX5消息服务详解(V3.2.1)视频: 视频:https://pan.baidu.com/s/1sls5c9B 配置 1.\conf\server.xml中 <mqtt-server>tcp://localhost:1883</mqtt-server>  配置消息服务地址 <external-address>http://demo.justep.cn</external-address>配置应

  • 本文向大家介绍php服务器的系统详解,包括了php服务器的系统详解的使用技巧和注意事项,需要的朋友参考一下 PHP服务器使用什么操作系统 windows系统和Linux系统都可以的,他们各有各的好处。 1、windows服务器 windows服务器操作方便适用于php初学者,随着Windows Server2008服务器的普及,微软已经开发了适合于php的控件PHP Manager,可以用IIS7

  • 本文向大家介绍AngularJS 中的Promise --- $q服务详解,包括了AngularJS 中的Promise --- $q服务详解的使用技巧和注意事项,需要的朋友参考一下 先说说什么是Promise,什么是$q吧。Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered。 什么是Promise 以前了解过Ajax的都能体