6、API网关 Zuul
该栏目讲叙微服务概念、注册中心、负载均衡、配置中心、服务熔断、服务消费等知识
文章目录
- 简介
- 1、概述
- 2、场景
- 3、优点
- Nginx 实现 API网关
- Zuul 实现 API网关
- 1、路由配置规则
- 2、网关过滤器
- 3、案例
简介
1、概述
- :API 网关就像一个安检站,所有外部的请求都需要经过它的调度与过滤,然后由 API 网关根据请求标识解析出具体的微服务地址,再把请求转发到该微服务
2、场景
路由
过滤
监控
安全认证
限流
3、优点
易于监控
易于认证
减少了客户端与各个微服务之间的交互次数
Nginx 实现 API网关
下载
:http://nginx.org/en/download.html
配置规则
# 打开nginx.confhttp {server {listen 80;server_name localhost;# 路由到商品服务localhost /api-order { # 当客户端访问这个路径时转发到proxy_pass指定的路径proxy_pass http://localhost:7070/;}# 路由到订单服务localhost /api-product { # 当客户端访问这个路径时转发到proxy_pass指定的路径proxy_pass http://localhost:9090/;}}
}
Zuul 实现 API网关
1、路由配置规则
服务名称路由
zuul:routes:product-service: # 路由Id自定义path: /product-service/** # 配置请求URL的映射路径serviceId: product-service # 根据serviceId自动从注册中心获取服务地址并转发
# 当路由Id和服务名称一致时,可以省略serviceId
路由排除
zuul:ignored-services: order-service # 服务名称排除,多个服务名称用逗号分隔,'*'排除所有# 不受路由排除影响routes:product-service:path: /product-service/**serviceId: product-service
服务名称路由
zuul:routes:product-service:path: /product-service/**serviceId: product-serviceprefix: /api # 路由前缀,例:http://localhost:8080/product-service/api/1
2、网关过滤器
概述
:对请求进行干预,是实现请求校验,服务聚合等功能的基础类型
描述 | 类型 |
---|---|
前置过滤 |
pre
|
路由后过滤 |
pre
|
后置过滤 |
post
|
异常过滤 |
error
|
生命周期
3、案例
配置依赖
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency>
</dependencies>
配置规则
server:port: 9000 # 端口spring:application:name: zuul-server # 应用名称# 配置路由
zuul:ignored-services: order-service # 服务名称排除,多个服务名称用逗号分隔,'*'排除所有prefix: /api # 路由前缀,例:http://localhost:8080/product-service/api/1routes:product-service: # 路由Id自定义path: /product-service/** # 配置请求URL的映射路径# 配置注册中心
eureka:instance:prefer-ip-address: true #启用IP地址注册instance-id: ${spring.cloud.client.ip-address}:${server.port} #ip:portclient:registry-fetch-interval-seconds: 10 # 表示客户端间隔多久向服务端摘取注册信息,默认30秒service-url: # 设置服务注册中心default-zone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
编写过滤器
// 用户登录过滤器
public class LoginFilter extends ZuulFilter {// 四种类型:pre,routing,error,post@Overridepublic String filterType() {return "pre";}//自定义过滤器执行的顺序,数值越大越靠后执行,越小就越先执行@Overridepublic int filterOrder() {return 0;}//控制过滤器生效不生效,可以在里面写一串逻辑来控制@Overridepublic boolean shouldFilter() {return true;}//执行过滤逻辑@Overridepublic Object run() throws ZuulException {RequestContext context = RequestContext.getCurrentContext();HttpServletRequest request = context.getRequest();String token = request.getParameter("token");if (token == null) {context.setSendZuulResponse(false);context.setResponseStatusCode(401);context.setResponseBody("unAuthrized");}return null;}}
启动网关
@SpringBootApplication
@EnableZuulProxy
public class ZuulServerApplication {public static void main(String[] args) {SpringApplication.run(ZuulServerApplication.class, args);}}
6、API网关 Zuul相关推荐
- 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul
通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...
- Netflix正式开源其API网关Zuul 2--转
微信公众号:聊聊架构 5 月 21 日,Netflix 在其官方博客上宣布正式开源微服务网关组件 Zuul 2.Netflix 公司是微服务界的楷模,他们有大规模生产级微服务的成功应用案例,也开源了相 ...
- Spring Cloud(四) API网关Zuul
前文回顾: Spring Cloud(一)Eureka Server-单体及集群搭建 Spring Cloud(二) 配置Eureka Client Spring Cloud(三) 熔断器Hystri ...
- 从零学SpringCloud系列(七):API网关Zuul
一.为什么需要API网关 通过前面对几个组件的 介绍,我们基本可以构建一个下图中的简单的微服务架构系统: 我们聚焦到Open Service 和 外部调用的地方,随着下方服务的增多,我们需要手动维护负 ...
- Netflix正式开源其API网关Zuul 2
5 月 21 日,Netflix 在其官方博客上宣布正式开源微服务网关组件 Zuul 2.Netflix 公司是微服务界的楷模,他们有大规模生产级微服务的成功应用案例,也开源了相当多的微服务组件(详见 ...
- SpringCloud 从菜鸟到大牛之七 服务网关 Zuul API网关等等
话不多说 ,照常理 ,先来一张 整体架构图 服务网关 的要素 常见的网关方案 Nginx +Lua Kong 收费的Kong Tyk(Go语言开发) Spring Cloud Zuul Spring ...
- API网关—系统的门面要如何做呢?
文章出自:阿里巴巴十亿级并发系统设计(2021版)-第27节:API网关:系统的门面要如何做呢? 链接:https://pan.baidu.com/s/1lbqQhDWjdZe1CBU-6U4jhA ...
- 10Wqps 超高并发 API网关 架构演进之路
说在前面 在尼恩的(50+)读者社群中,经常遇到一个 API网关 架构方面的问题: (1) 尼恩老师,最近公司我们在规划业务出口网关(目的,整合规范外部调用,如短信平台 mqtt 等) 我在做整理技术 ...
- 5 种 API 网关技术选型,yyds!
程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 20 分钟. 来自:https://developer.aliyun.com/article/889271 本文准备围绕七个点 ...
最新文章
- python中的协程(二)
- 水晶报表printmode的ActiveX打印
- 大数据处理平台与案例
- php折线图 布局图
- C++ static静态成员函数详解
- matlab1信号的单边z变换:,实验二 离散时间信号与系统的Z变换分析
- rxjs of操作符里subscribeToArray的实现原理示意图及分析
- 瘦子的肠道菌群和胖子的区别_瘦身的“秘诀”是什么?做好5个生活习惯,就能变成一个瘦子...
- LKT系列加密芯片如何预置openssl生成的rsa密钥完成运算
- Mysql show status详解
- percona mysql 同步_Percona MySQL5.6 半同步复制
- 计算机工程工艺,中国计算机学会第十届计算机工程与工艺学术年会.pdf
- 个人中心html界面设计,APP个人中心页面设计
- 疫情时代无接触AI人脸识别技术助力智慧工地迅猛发展
- HTML超链接怎么做
- 【稳定性day4】美团外卖高可用的演进之路 - 日活两千万的挑战
- 无聊猿将与 Coinbase 共同制作电影三部曲进军好莱坞
- BeanFactory和ApplicationContext的区别
- java excel导出 jxl_JAVA利用JXL导出/生成 EXCEL
- CP1202官方串口驱动