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


文章目录

  • 简介
    • 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. 找工作实用书《LeetCode 题解》(附pdf)
  2. K8S发布解释型语言应用的最佳实践
  3. 【FPGA-F3】阿里云FAAS平台,极大简化FPGA开发部署流程
  4. kaggle提交前预估本地cv和LB上的score是否相差很大
  5. 案例 github_2019年12月Github上最热门的Java开源项目,速来围观!
  6. 第十八届浙大城市学院程序设计竞赛(同步赛)签到题ABDFGJL
  7. C++的string类
  8. nginx+Git 404 error 错误处理
  9. 地狱少女...._习惯累积沉淀_新浪博客
  10. linux hotplug 机制,佐须之男的博客- 跟着佐大学Lede/OpenWrt开发入门培训班讲义-18 OpenWrt hotplug 机制分析...
  11. (附源码)SSM医院人事及科室病区管理JAVA计算机毕业设计项目
  12. [组原]初识-地址总线,地址寄存器,存储单元,存储字长
  13. c语言排考场座位链表,用Excel制作考场座位布置图
  14. 按键精灵 打开windows系统应用
  15. Scrum立会报告+燃尽图(Beta阶段第七次)
  16. 怎么查看自己微信支付宝绑定银行卡号
  17. linux 脚本含参,linux shell脚本文件的入参
  18. 使用iTunes与iTools导出微信聊天记录
  19. 打印机 “错误-正在打印”
  20. LoadRunner使用教程

热门文章

  1. SolidWorks 如何制作装配体
  2. c++实现三国杀小游戏
  3. 码蹄集 - MT3029 - 新月轩就餐
  4. 小花经过春雨的一番滋润
  5. 通读Docs - 《OPL1000 自学整理教程》
  6. 如何制作会动的玫瑰花图片?静态图片动起来的方法
  7. stm32f105固件包_STM32F105/107
  8. Python 谷歌翻译_浏览器版本 selenium (2022年1月测试可用)
  9. 微信开发验证身份-微信开发教程5
  10. freeCAD学习笔记三:复制草图中的对象