微服务-GateWay(网关)

这篇具有很好参考价值的文章主要介绍了微服务-GateWay(网关)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

所谓网关是什么意思?

       相当于就是你们小区家的保安,进出小区都得获得保安的同意,守护你们小区的生命财产健康,网关也是如此,对每个请求都严格把关,将合法的或者是获得权限的请求进入服务器

网关的功能:

  • 身份验证和权限校验
  • 服务路由、负载均衡
  • 请求限流

微服务-GateWay(网关),微服务,微服务,gateway,linux

 一般的常见的网关分别是:

Gateway:基于Spring5中提供的WebFlux,属于响应式编程的实现,具有更好的性能

zuul:基于servlet的实现,属于阻塞式编程

搭建网关服务

1.创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖:

   <!--nacos服务注册发现依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--网关gateway依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

2.编写路由配置即nacos地址:

server:
  port: 10010
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: nacos:8848 # nacos地址
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: # 路由断言,判断请求是否符合规则
            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合

微服务-GateWay(网关),微服务,微服务,gateway,linux

总结:

网关搭建的步骤:

1.创建项目,引入nacos服务发现和gateway依赖

2.配置application.yml,包括服务基本信息、nacos地址、路由

路由配置包括:

1.理由id:路由的唯一标识

2.路由目标:路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡

3路由断言:判断路由的规则

4.路由过滤器:对去请求或响应做处理

路由断言工厂(Route Predicate Factory)

网关路由可以配置的内容为:

  • 路由id:路由唯一标示
  • uri:路由目的地,支持lb和http两种
  • predicates:路由断言,判断请求是否符合要求,符合则转发到路由目的地

       配置文件中的规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件,例如“Path=/user/**”是按照路径进行匹配,只让以/user开头的就认为是符合的

  • filter:路由过滤器,处理请求或响应

11种工厂:

微服务-GateWay(网关),微服务,微服务,gateway,linux

 路由过滤器GatewayFilter

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理

微服务-GateWay(网关),微服务,微服务,gateway,linux

 下面列举几个Spring提供的不同的路由过滤器工厂:

微服务-GateWay(网关),微服务,微服务,gateway,linux

现在要求给进入A服务的所有请求添加一个请求头,你会怎么实现?

给某个服务单独添加请求头:

spring:
  cloud:
    gateway:
      routes:#网关路由配置
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**
          filters: #过滤器
           - AddRequestHeader=Truth,Itcast is freaking awesome!#添加请求头

如果要对所有的路由都生效,即可将过滤工厂写到default下,如:

spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: nacos:8848 # nacos地址
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: # 路由断言,判断请求是否符合规则
            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**
      default-filters:#对所有的路由都生效的过滤器
        - AddRequestHeader=Truth,Itcast is freaking awesome!

全局过滤器

       全局过滤器的作用也是处理一切网关的请求和微服务响应,与GatewayFilter的作用一样,区别在GatewayFilter通过配置定义,处理逻辑时固定的,而GlobalFilter的逻辑需要自己写代码实现,定义是实现GlobalFilter接口

//@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 1.获取请求参数
        ServerHttpRequest request = exchange.getRequest();
        MultiValueMap<String, String> params = request.getQueryParams();
        // 2.获取参数中的 authorization 参数
        String auth = params.getFirst("authorization");
        // 3.判断参数值是否等于 admin
        if ("admin".equals(auth)) {
            // 4.是,放行
            return chain.filter(exchange);
        }
        // 5.否,拦截
        // 5.1.设置状态码
        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        // 5.2.拦截请求
        return exchange.getResponse().setComplete();
    }

    @Override
    public int getOrder() {
        return -1;
    }

步骤:

1.实现GlobalFilter接口

2.添加@Order注解或者实现Ordered接口

3.编写处理逻辑

过滤器执行顺序

微服务-GateWay(网关),微服务,微服务,gateway,linux

  •  每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序越靠前
  • GlobalFilter通过实现Ordered接口,或者添加@Order注解来指定order值
  • 路由过滤器和defaultFilter的order由Spring指定,默认是按照声明顺序从1递增
  • 当过滤器的order值一样时,会按照defaultFilter>局部路由过滤器>GlobalFilter的顺序执行

跨域问题

       跨域问题:域名不一致就是跨域。浏览器禁止请求的发起者与服务器发生跨域ajax请求,请求被浏览器拦截的问题

CORS:文章来源地址https://www.toymoban.com/news/detail-656429.html

spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: nacos:8848 # nacos地址
    gateway:
      globalcors: #全年的跨域处理
        add-to-simple-url-handler-mapping: true #解决options请求被拦截问题
        corsconfigurations: 
          '[/**]':
            allowedOrigins: #允许哪些网站的跨域请求
              -"http://127.0.0.1:8090"
            allowedMethods: #允许的跨域ajax的请求方式
              -"GET"
            -"POST"
            -"DELETE"
            -"PUT"
            -"OPTIONS"
            allowedHeaders: "*" #允许在请求中携带的头信息
                allowCredentials: true #是否允许携带cookie
            maxAge: 360000 #这次跨域检测的有效期

到了这里,关于微服务-GateWay(网关)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SpringCloud】Gateway服务网关

    Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 Gateway网关是我们服务的守门神,所有微服务的统一入口。 网关的

    2024年02月13日
    浏览(42)
  • SpringCloud:Gateway服务网关

    网关(Gateway)是将两个使用不同协议的网络段连接在一起的设备。 网关的作用就是对两个网络段中的使用不同传输协议的数据进行互相的翻译转换。 创建服务 导入依赖 编写启动类 添加配置 Route Predicate Factories :: Spring Cloud Gateway 对所有路径都生效 全局过滤器的作用也是处理

    2024年02月01日
    浏览(44)
  • Gateway服务网关使用教程

    目录 1.为什么需要网关 2.gateway快速入门 1)创建gateway服务,引入依赖 2)编写启动类 3)编写基础配置和路由规则 4)重启测试 5)网关路由的流程图 3.断言工厂 4.过滤器工厂 4.1.路由过滤器的种类 4.2.请求头过滤器 4.3.默认过滤器 4.4.总结 5.全局过滤器 5.1.全局过滤器作用 5.2.自

    2024年02月09日
    浏览(40)
  • 微服务04-Gateway网关

    身份认证 :用户能不能访问 服务路由 :用户访问到那个服务中去 负载均衡 :一个服务可能有多个实例,甚至集群,负载均衡就是你的请求到哪一个实例上去 · 请求限流功能 :对请求进行流量限制,对服务进行请求限制 流程 : 1.首先咱们先将服务以及网关注册到Nacos注册

    2024年02月09日
    浏览(24)
  • 微服务-GateWay(网关)

    所谓网关是什么意思?        相当于就是你们小区家的保安,进出小区都得获得保安的同意,守护你们小区的生命财产健康,网关也是如此,对每个请求都严格把关,将合法的或者是获得权限的请求进入服务器 网关的功能: 身份验证和权限校验 服务路由、负载均衡 请求限

    2024年02月12日
    浏览(25)
  • 微服务-统一网关Gateway

    对用户请求做身份认证、权限校验 将用户请求路由到微服务,并实现负载均衡 对用户请求做限流 创建新module,命名为Gateway,引入依赖(1.SpringCloudGateway依赖;2.Eureka客户端依赖或者nacos的服务发现依赖)。在本案例中使用的是Eureka。 配置Application.yml的网关服务 路由id:路由

    2024年02月08日
    浏览(30)
  • 服务网关 Gateway

    在微服务架构中,一个大的系统被拆分成为了多个小的服务提供出来,每一个服务他们自成体系,每一个服务可以拥有自己的数据库,可以使用不同的技术框架和不同的语言进行开发,每一个服务都有自己的服务地址,服务之间通常以提供 Rest Api 风格的接口来相互调用。 客

    2024年02月12日
    浏览(24)
  • SpringCloud - GateWay服务网关

    gateway 官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 在微服务架构中,一个系统往往由多个微服务组成,而这些服务可能部署在不同机房、不同地区、不同域名下。这种情况下,客户端(例如浏览器、手机、软件工具等)想要直接请求这些服务

    2024年02月07日
    浏览(40)
  • Gateway的服务网关

    Gateway网关是我们服务的守门神,所有微服务的统一入口。 网关的 核心功能特性 : 请求路由 权限控制 限流 架构如下:    创建gateway服务,引入依赖   创建application.yml文件,内容如下 在gateway服务的application.yml文件中,添加下面的配置      

    2024年02月10日
    浏览(29)
  • 服务网关Gateway

    API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 破坏了服务无状态特点。 为了保证对外服务的安全性,我们需要实

    2024年02月06日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包