该栏目讲叙微服务概念、注册中心、负载均衡、配置中心、服务熔断、服务消费等知识


文章目录

  • 简介
    • 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相关推荐

  1. 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul

    通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...

  2. Netflix正式开源其API网关Zuul 2--转

    微信公众号:聊聊架构 5 月 21 日,Netflix 在其官方博客上宣布正式开源微服务网关组件 Zuul 2.Netflix 公司是微服务界的楷模,他们有大规模生产级微服务的成功应用案例,也开源了相 ...

  3. Spring Cloud(四) API网关Zuul

    前文回顾: Spring Cloud(一)Eureka Server-单体及集群搭建 Spring Cloud(二) 配置Eureka Client Spring Cloud(三) 熔断器Hystri ...

  4. 从零学SpringCloud系列(七):API网关Zuul

    一.为什么需要API网关 通过前面对几个组件的 介绍,我们基本可以构建一个下图中的简单的微服务架构系统: 我们聚焦到Open Service 和 外部调用的地方,随着下方服务的增多,我们需要手动维护负 ...

  5. Netflix正式开源其API网关Zuul 2

    5 月 21 日,Netflix 在其官方博客上宣布正式开源微服务网关组件 Zuul 2.Netflix 公司是微服务界的楷模,他们有大规模生产级微服务的成功应用案例,也开源了相当多的微服务组件(详见 ...

  6. SpringCloud 从菜鸟到大牛之七 服务网关 Zuul API网关等等

    话不多说 ,照常理 ,先来一张 整体架构图 服务网关 的要素 常见的网关方案 Nginx +Lua Kong 收费的Kong Tyk(Go语言开发) Spring Cloud Zuul Spring ...

  7. API网关—系统的门面要如何做呢?

    文章出自:阿里巴巴十亿级并发系统设计(2021版)-第27节:API网关:系统的门面要如何做呢? 链接:https://pan.baidu.com/s/1lbqQhDWjdZe1CBU-6U4jhA  ...

  8. 10Wqps 超高并发 API网关 架构演进之路

    说在前面 在尼恩的(50+)读者社群中,经常遇到一个 API网关 架构方面的问题: (1) 尼恩老师,最近公司我们在规划业务出口网关(目的,整合规范外部调用,如短信平台 mqtt 等) 我在做整理技术 ...

  9. 5 种 API 网关技术选型,yyds!

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 20 分钟. 来自:https://developer.aliyun.com/article/889271 本文准备围绕七个点 ...

最新文章

  1. 高版本linux安装gamit,求助(Ubuntu14.1上安装GAMIT10.5过程中错误提示如下)
  2. 实用目标检测器 | 性能超YoloV5,推理耗时不变(附github源码)
  3. 过滤输入内容中是否含有特殊字符与表情
  4. CTFshow 文件上传 web159
  5. python去掉列表中的单引号_Python:如何从列表项中删除单引号(Python: How to remove single quotes from list item)...
  6. 爆款专栏《Python 黑科技》目录导航丨进度:12/50
  7. Excel 表单控件之 CheckBox 集合事件响应
  8. Linux运维新主机挂载硬盘,linux运维:Linux下添加新硬盘+分区及挂载详细步骤图解...
  9. 从set中取出指定位置的元素
  10. 隐藏版本信息号返回服务器名,配置服务器版本信息隐藏
  11. Ubuntu上NFS的代理设置安装配置
  12. 白英彩 计算机组成原理,国家教委关于批转试行全国考委高等教育自学考试电气工程、电子技术、计算机及其应用三个专业专科考试计划的通知...
  13. C++调用C#创建的COM组件
  14. Gradle全版本资源下载
  15. Vue3,Vite3,TS,Naive-UI整合TailwindCSS
  16. 形状的度量Measures of Shape
  17. 校园 计算机网络设置路由器,Drcom校园网连接路由器怎么设置
  18. Android搜索控件SearchView的用法
  19. C++编程练习 计算一元二次方程组解判断是否测试过三种情况
  20. 直播app开发解决方案

热门文章

  1. 【区间 dp】A005_LC_工作计划的最低难度(暴搜 / dp)
  2. 三菱编程软件GX Works2复制粘贴错位
  3. python中的库有哪些餐厅_推荐一些实用的的 Python 库
  4. 背景与小鸟--FlappyBird游戏开发教程之二
  5. 数据库SUSPECT(置疑)状态如何解决
  6. Tableau 快速表计算 显示百分比 / 累计走势
  7. 拓嘉辰丰:拼多多订单退款流程有哪些?
  8. 《那些年啊,那些事——一个程序员的奋斗史》——43
  9. 网络基础之虚拟路由器冗余协议(VRRP)理论基础及华为ENSP基础配置
  10. java程序设计 秒表计时器_【Java】Java计时器(秒表)