栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Cloud Gateway网关

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Cloud Gateway网关

一.API网关

API网关,就是指系统的统一入口,它封装来应用程序的内部结构,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证,鉴权,监控,路由转发等等。


二.业界流行的网关
  • Ngnix+lua :使用nginx的反向代理和负载均衡可实现api服务器的负载均衡及高可用。lua是一种脚步语言,可以来编写一些简单的nginx支持lua脚本。
  • Kong:基于Nginx+Lua开发,性能高,稳定,有多个可用的插件(限流,鉴权等等)可以开箱即用。缺点:只支持http协议;二次开发,自由扩展困难;提供管理API,缺乏更易用的管控,配置方式。
  • Zuul:Netflix开源的网关,功能丰富,使用Java开发,易于二次开发。缺点:缺乏管控,无法动态配置;依赖组件较多;处理http请求依赖的是web容器,性能不如nginx
  • Spring Cloud Gateway:Spring公司为了替换Zuul而开发的网关服务,SpringCloud alibaba技术栈中并没有提供自己的网关,我们可以采用Spring Cloud Gateway来做网关

三 .SpringCloud Gateway简介

SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,而且基于Fliter链的方式提供了网关基本的功能,例如:安全,监控/指标和限流。

(1)优点:

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

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

设计优雅,容易扩展

(2)缺点:

其实现依赖Netty与WebFlux,不是传统的Servlet编程模型,学习成本高

不能将其部署在tomcat,jetty等Servlet容器里,只能打成jar包执行

需要Spingboot2.0及以上的版本,才支持。


四 SpringCloud Gateway快速入门 1. 创建新模块,导入依赖
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        
2. 创建主类
@SpringBootApplication
public class RuoYiGatewayApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(RuoYiGatewayApplication.class, args);
       
    }
}
3. 添加配置文件application.yml
server:
  port: 8080
 
spring: 
  application:
    name: ruoyi-gateway
  cloud:
    gateway:
      routes: #路由数组[路由就是指定当请求满足什么条件的时候转到哪个微服务]
        # 系统模块
        - id: ruoyi-system #当前路有的标示,要求唯一
          uri: http://localhost:9201/ #请求要转发到的地址
          predicates: #断言(就是路由转发要满足的条件)
            - Path=/system/** #当前请求路径满足Path指定的规则时,才进行路有转发
          filters: #过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改
            - StripPrefix=1  #转发之前去掉1层路径
4. 运行效果

在地址栏输入 localhost:8080/system/user/1就会自动跳转到 localhost:9201/user/1

其中路径中的system被过滤掉,8080变成9201

5. 使用nacos注册中心配置方式进行优化

(1)现在在配置文件中写死了转发路径的地址,我们需要使用nacos获取此地址,

(2)并使用  uri: lb://ruoyi-system #请求要转发到的地址 自动实现负载均衡

第1步,加入nacos依赖

  
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        

第2部:应用加上注解@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class RuoYiGatewayApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(RuoYiGatewayApplication.class, args);
       
    }
}

第3部:修改配置文件

server:
  port: 8080
 
spring: 
  application:
    name: ruoyi-gateway
  cloud:
    nacos:
      discovery:
      server-addr: 127.0.0.1:8848
    gateway:
      discovery:
        locator:
        lowerCaseServiceId: true
        enabled: true   #让gateway可以发现nacos的微服务
      routes: #路由数组[路由就是指定当请求满足什么条件的时候转到哪个微服务]
        # 系统模块
        - id: ruoyi-system #当前路有的标示,要求唯一
          uri: lb://ruoyi-system #请求要转发到的地址
          predicates: #断言(就是路由转发要满足的条件)
            - Path=/system/** #当前请求路径满足Path指定的规则时,才进行路有转发
          filters: #过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改
            - StripPrefix=1  #转发之前去掉1层路径

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/349001.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号