IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringCloud Gateway 的核心概念 -> 正文阅读

[Java知识库]SpringCloud Gateway 的核心概念

常见网关介绍

  • Ngnix+lua

使用nginx的反向代理和负载均衡可实现对api服务器的负载均衡及高可用,lua是一种脚本语言,可以来编写一些简单的逻辑, nginx支持lua脚本

  • Kong

基于Nginx+Lua开发,性能高,稳定,有多个可用的插件(限流、鉴权等等)可以开箱即用。 问题:只支持Http协议;二次开发,自由扩展困难;提供管理API,缺乏更易用的管控、配置方式。

  • Zuul

Netflflix开源的网关,功能丰富,使用JAVA开发,基于servlet2.5 使用的阻塞架构 不支持任何长连接,易于二次开发 问题:缺乏管控,无法动态配置;依赖组件较多;处理Http请求依赖的是Web容器,性能不如Nginx,Spring Cloud Gateway

  • SpringCloud Gateway

SpringCloud Gateway Spring公司为了替换Zuul而开发的网关服务.

SpringCloud Gateway 是Spring 官方最新推出的一款基于SpringFramework 5 Project Reactor 和Springboot2 之上开发的网关

它与第一代网关Zuul 不同的是 gateway 是异步非阻塞的 (Netty Reactor + webflux 实现)zuul 是同步阻塞请求的

SpringCloud Gateway 是工程的最前端

在这里插入图片描述
网关是微服务工程架构下的唯一入口 (客户端)

SpringCloud Gateway 提供了统一的路由方式 基于Filter 连的方式提供了网关的基本功能


SpringCloud Gateway 优缺点

优点:

  • 性能强劲:是第一代网关Zuul的1.6倍

  • 功能强大:内置了很多实用的功能,例如转发、监控、限流等

  • 设计优雅,容易扩展

缺点:

  • 其实现依赖Netty与WebFlux,不是传统的Servlet编程模型,学习成本高
  • 不能将其部署在Tomcat、Jetty等Servlet容器里,只能打成jar包执行
  • 需要Spring Boot 2.0及以上的版本,才支持

SpringCloud Gateway 三大组成部分

在这里插入图片描述
Route、Predicate 、Filter

? Route(路由) 是构建网关的基本模型 由ID URI 一系列的断言和过滤器组成

? Predicate (断言) 可以匹配Http 请求中所有的内容(请求头 参数等等) 请求与断言相匹配则通过当前断言

? Filter(过滤器) 包括全局和局部过滤器 可以在请求被路由钱后对请求进行更改
在这里插入图片描述

SpringCloud Gateway 工作模型

在这里插入图片描述
? **1. 请求发送到网关,经由分发器将请求匹配到相应的 HandlerMapping **

? 2. 请求和处理器之间有一个映射,路由到网关处理程序 即Web Handler

? 3. 执行特定的请求过滤器链

? **4. 最终到达代理的微服务 **

SpringCloud Gateway 代码实现

三板斧操作
1.加入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <parent>
     <artifactId>shop-parent</artifactId>
     <groupId>com.itzhouwei</groupId>
     <version>1.0</version>
 </parent>
 <modelVersion>4.0.0</modelVersion>

 <artifactId>api-gateway</artifactId>

 <dependencies>
     <!--gateway网关-->
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-gateway</artifactId>
     </dependency>
     <!--nacos客户端-->
     <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     </dependency>
     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
     </dependency>
 <!-- 网关集成Sentinel -->
     <dependency>
         <groupId>com.alibaba.csp</groupId>
         <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
     </dependency>
 </dependencies>
</project>

2.编写启动类

package com.itzhouwei.api.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ApiGatewayServer {

  public static void main(String[] args) {
      SpringApplication.run(ApiGatewayServer.class,args);
  }
}

3.编写配置文件

server:
port: 9000
spring:
application:
  name: api-gateway
cloud:
  nacos:
    discovery:
      server-addr: localhost:8848
  gateway:
    discovery:
      locator:
        enabled: true # 让gateway可以发现nacos中的微服务

4.启动测试
在这里插入图片描述
5. 自定义路由规则

server:
  port: 9000
spring:
  application:
    name: api-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true # 让gateway可以发现nacos中的微服务
      routes:
        - id: product_route
          uri: lb://product-service
          predicates:
            - Path=/product-serv/**
          filters:
               - StripPrefix=1
        - id: order_route
          uri: lb://order-service
          predicates:
            - Path=/order-serv/**
          filters:
            - StripPrefix=1
            - Time=true

6 测试
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:14:58  更:2022-03-08 22:15:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:57:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码