写点什么

Zuul 网关搭建实战详解教程

发布于: 2021 年 05 月 09 日
Zuul网关搭建实战详解教程

接口 API 技术

  • 接口是在面向服务架构(SOA)和微服务的背景下 RPC 远程调用产生的,目的是为了解耦

  • 接口分类:

  • 开放接口

  • 在外网进行访问

  • 通过 appid+appsecret, 生成 accessToken 进行通讯

  • 目的是为了授权接口权限,OAuth2.0 协议

  • 内部接口

  • 一般只能在局域网中进行访问

  • 服务与服务之间的调用关系都在同一个微服务系统中

  • 目的是为了保证安全

如何设计一套 API 接口

  • 接口权限: 开放接口,内部接口

  • 接口幂等性

  • 接口安全性

  • 为了防止篡改数据,要验证签名

  • 使用网关拦截接口,实现黑名单和白名单

  • 接口使用 RESTful 风格:http 协议+json 格式,目的是为了跨平台

  • 考虑到高并发的情况,对接口服务实现保护功能:服务降级,服务熔断,服务保护

  • 最后使用统一的 API 管理平台:api swagger

网关(API Gateway)

  • 客户端请求先统一请求到网关服务器上,再由网关服务器进行转发到实际的服务地址

  • 网关作用:

  • 拦截请求

  • 权限控制

  • 负载均衡

  • 日志管理

  • 监控接口

  • 网关与过滤器的区别:

  • 网关是拦截整个微服务的请求

  • 过滤器是对单个 Tomcat 服务器进行拦截请求

  • 网关分为内网网关外网网关

  • Zuul 和 Nginx 的异同:

  • 相同点:

  • Zuul 和 Nginx 都可以实现负载均衡,反向代理,过滤请求,实现网关效果

  • 不同点:

  • 开发语言不同: Zuul 采用 Java 语言写的,Nginx 采用 C 语言写的

  • 负载均衡实现不同: Zuul 中采用 Ribbon+Eureka 实现客户端负载均衡,Nginx 实现的服务器端负载均衡

  • Nginx 比 Zuul 功能更强大,因为 Nginx 整合了脚本语言(Nginx+Lua),更适合服务器端负载均衡

  • Zuul 更适合 Java 语言微服务中的网关的实现

  • 可以使用 Nginx+Zuul 作为网关实现:Nginx 用于实现反向代理(隐藏服务真实 IP 地址),Zuul 对微服务的实现网关拦截请求

搭建 Zuul 网关

1.引入Zuul依赖spring-cloud-starter-netflix-zuul2.配置文件:eureka.client.serviceUrl.defaultZoo=http://localhost:8100/eureka  #服务注册url地址server.port=80    # 网关端口号spring.application.name=service-zuul    # 网关名称zuul.routes.api-a.path=/api-ticket/**    #当客户端发送请求127.0.0.1:80/api-ticket/开头的,都会被发送到app-ticket服务中zuul.routes.api-a.serviceId=app-ticket    # ticket服务别名,zuul整合ribbon默认自动实现负载均衡效果zuul.routes.app-b.path=/api-user/**      # 当客户端发送请求127.0.0.1/api-user/开头的,都会被发送到app-user服务中  zuul.routes.app-b.serviceId=app-user    # app-b定义转发规则3.在类上标注@EnableZuulProxy注解开启网关代理
复制代码

搭建 ZuulFilter 过滤器

1.创建过滤器类继承ZuulFilter2.获取上下文3.获取Request对象4.从请求头中获取token5.创建过滤器执行逻辑6.实现ZuulFilter中的方法:        过滤类型:filterType()  pre-表示在请求之前执行.        过滤器执行顺序:filterOrder()  当一个请求在同一阶段存在多个过滤器的时候,规定多个过滤器的执行顺序        判断过滤器是否生效:shouldFilter()
复制代码

搭建动态 Zuul 网关路由转发

  • 传统方式将路由规则配置在配置文件中,如果路由地址发生了改变,需要重启服务器

  • 在微服务中应该将路由规则配置在 SpringCloud Config 分布式配置中心,实现动态路由规则.

  • 配置 SpringCloud Config 分布式配置中心的实时刷新


  1.引入actuator依赖spring-boot-starter-actuator  2.在配置文件中开启监控端点  management.endpoints.web.exposure.include="*"    # 开启所有端点  3.启动运行configClient  4.在需要刷新的controller类中的bean当标注@RefreshScope注解使actuator刷新生效
复制代码

搭建 Nginx+Zuul 网关集群

  • 如何实现集群: 保证每台服务数据一致,使用 Nginx 实现反向代理和负载均衡

  • Zuul 搭建网关:

  • 使用 Nginx+Zuul

  • 遵循一主一备或者轮询的原则

  • 网关是多个

  • 网关集群原理: 客户端发送请求,所有请求统一到 Nginx 上,在 Nginx 中实现反向代理和负载均衡,再使用轮询机制转发到网关上


1.在host中配置域名2.在Nginx配置文件中配置上游服务器(upstream),默认实现负载均衡3.在过滤器中调用网关接口
复制代码


  • Nginx 和 Zuul 区别:

  • 微服务网关是针对整个微服务实现统一请求拦截,因此网关都采用相关语言(Java)开发

发布于: 2021 年 05 月 09 日阅读数: 74
用户头像

一位攻城狮的自我修养 2021.04.06 加入

分享技术干货,面试题和攻城狮故事。 你的关注支持是我持续进步的最大动力! https://github.com/ChovaVea

评论

发布
暂无评论
Zuul网关搭建实战详解教程