微服务04-Gateway网关

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

作用

身份认证:用户能不能访问

服务路由:用户访问到那个服务中去

负载均衡:一个服务可能有多个实例,甚至集群,负载均衡就是你的请求到哪一个实例上去

微服务04-Gateway网关,微服务,微服务,gateway,架构
·请求限流功能:对请求进行流量限制,对服务进行请求限制

两种网关实现:

微服务04-Gateway网关,微服务,微服务,gateway,架构

搭建网关

微服务04-Gateway网关,微服务,微服务,gateway,架构

流程

1.首先咱们先将服务以及网关注册到Nacos注册中心;
2.然后用户请求,网关路由进行判断地址是不是以/user或者/order开头的,如果是,则跳转路由目标地址uri,然后请求地址则会代理到userservice或者是orderservice,
3.然后再从Nacos注册中心里根据服务orderservice或者是xxxservice找到对应的地址,
4.最后根据负载均衡找到实例

微服务04-Gateway网关,微服务,微服务,gateway,架构
1.创建gateway网关模块

2.导入nacos服务发现依赖和gateway依赖,说明是个网关

3.然后进行配置文件的配置,配置服务的信息以及地址将其注册到Nacos中。还有路由的信息(1.路由标示2.目标地址3.路由断言)

server:
  port: 10010
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:80  #nacos地址  (因为我在上一章中还是使用的nacos集群启动 Nginx反向代理的 端口是80  正常的话是8848 )
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: # 路由断言,判断请求是否符合规则
            - Path=/user/** # 路径断言,判断路径是否以/user开头,如果是则符合,跳转路由
 
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**

微服务04-Gateway网关,微服务,微服务,gateway,架构
然后我们访问10010端口,断言predicate设置的path路径正确即可访问
微服务04-Gateway网关,微服务,微服务,gateway,架构

路由断言

Predicate作用:将断言规则解析成条件作为请求过来的判断

微服务04-Gateway网关,微服务,微服务,gateway,架构
微服务04-Gateway网关,微服务,微服务,gateway,架构

server:
  port: 10010
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos地址
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: # 路由断言,判断请求是否符合规则
            - Path=/user/** # 路径断言,判断路径是否以/user开头,如果是则符合,跳转路由
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**
            - After=2022-05-14T15:14:47.433+08:00[Asia/Shanghai] # (这个时间点之后的才能访问)

Gateway中的路由过滤器配置

微服务04-Gateway网关,微服务,微服务,gateway,架构
过滤器可以对于请求进行过滤:比如请求头请求体请求参数…
也可以对响应进行过滤,给到用户服务想给的内容

微服务04-Gateway网关,微服务,微服务,gateway,架构

过滤器案例 :加请求头

1.我们直接在配置文件中进行配置即可:

第一种:在路由中配置(这是一个服务的范围,对于访问这个服务会有过滤)

第二种:与routes范围一样,是对于整个全局的,所有服务;

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

这里我们对用户服务增加一个请求头信息,访问localhost:10010/user/1,服务器就会打印过滤器中的信息

  @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id,
                          @RequestHeader(value="Truth",required = false) String truth) {
        System.out.println("truth:"+truth);
        return userService.queryById(id);
    }

结果:
微服务04-Gateway网关,微服务,微服务,gateway,架构

全局过滤器

作用:处理一切进入网关的请求和微服务的响应,与GatewayFilter的作用一样

与GatewayFilter区别:前者通过自定义配置可以处理逻辑,后者的逻辑需要自己写代码实现;

微服务04-Gateway网关,微服务,微服务,gateway,架构

案例:定义全局过滤器,拦截用户判断身份

微服务04-Gateway网关,微服务,微服务,gateway,架构

步骤:

我们直接定义一个全局过滤器即可,实现GlobalFilter

package cn.itcast.gateway;
 
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
 
/**
 * @author diao 2022/5/9
 */
@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {
 
    /**
     *
     * @param exchange:里面有request和response
     * @param chain:过滤器链
     * @return
     */
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        //1.得到request中的所有参数
        MultiValueMap<String, String> params = request.getQueryParams();
 
        //2.获取里面含有authorization的参数
        String auth = params.getFirst("authorization");
 
        //3.判断参数是否符合:authorization==admin
        if("admin".equals(auth)){
            return chain.filter(exchange);
        }
 
        //4.进行拦截,并且设置响应状态码
        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        return exchange.getResponse().setComplete();
    }
}

当request请求参数authorization!=admin,被拦截的情况

微服务04-Gateway网关,微服务,微服务,gateway,架构
当加上请求参数,并且值符合
微服务04-Gateway网关,微服务,微服务,gateway,架构
总结:

跟Gateway过滤器最大的区别就是,它可以自定义

微服务04-Gateway网关,微服务,微服务,gateway,架构

过滤器执行顺序

微服务04-Gateway网关,微服务,微服务,gateway,架构
可以发现GlobalFilter和DefaultFilter、当前路由器是同一种

微服务04-Gateway网关,微服务,微服务,gateway,架构

执行顺序注意事项:

1.order值越小优先级越高,优先看order值

2.当order值一样时,顺序好似defaultFilter优先,因为它是排在路由routes

微服务04-Gateway网关,微服务,微服务,gateway,架构

跨域请求处理

跨域:域名不一致

端口不一致:8080与8081

跨域问题:浏览器禁止请求的发起者与服务端发生跨域的ajax请求,请求被浏览器拦截的问题——>像我们之前的订单服务调用用户服务就不属于跨域问题;

CORS方案:

模板:

  globalcors: # 全局的跨域处理
        add-to-simple-url-handler-mapping: true # 网关放行请求
        cors-configurations:
          '[/**]':
            allowedOrigins: # 允许哪些网站跨域请求
              - "http://localhost:8090"
              - "http://www.leyou.com"
            allowedMethods: #运行跨域ajax的请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
            allowedHeaders: "*" #允许在请求中有头信息
            allowCredentials: true # 是否允许携带cookie
            maxAge: 3600

微服务04-Gateway网关,微服务,微服务,gateway,架构

对比于寻常的nginx,除了负载均衡之外,我们的gateway可以对异常进行统一处理,包括权限设置,跨域等等; 主要是通过nacos中拉去服务,通过服务名称进行拉取

微服务04-Gateway网关,微服务,微服务,gateway,架构
微服务04-Gateway网关,微服务,微服务,gateway,架构文章来源地址https://www.toymoban.com/news/detail-699187.html

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

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

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

相关文章

  • 【SpringCloud技术专题】「Gateway网关系列」(2)微服务网关服务的Gateway功能配置指南分析

    Spring Cloud Gateway简介 Spring Cloud Gateway是Spring Cloud体系的第二代网关组件,基于Spring 5.0的新特性WebFlux进行开发,底层网络通信框架使用的是Netty,所以其吞吐量高、性能强劲,未来将会取代第一代的网关组件Zuul。 Spring Cloud Gateway可以通过服务发现组件自动转发请求,默认集成了

    2024年02月11日
    浏览(35)
  • 【SpringCloud技术专题】「Gateway网关系列」(1)微服务网关服务的Gateway组件的原理介绍分析

    为什么要有服务网关? 我们都知道在微服务架构中,系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?难道要一个个的去调用吗?很显然这是不太实际的,我们需要有一个统一的接口与这些微服务打交道,这就是我们需要服务网关的原因。 我们

    2024年02月11日
    浏览(45)
  • 【微服务】服务网关----Gateway

    上篇文章讲解了如何实现服务容错,这篇就介绍下,服务网关— Gateway 。在本篇文章中,你将了解到什么是服务网关?什么是Gateway?如何实现Gateway?Gateway的核心架构有哪些ÿ

    2024年01月24日
    浏览(38)
  • 两天学会微服务网关Gateway-Gateway路由规则

    锋哥原创的微服务网关Gateway视频教程: Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibili Gateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3_Gateway HelloWorld快速入门等,UP主更多精彩视频,请关注UP账号。 https://www.bilibili.com

    2024年03月18日
    浏览(46)
  • 微服务-统一网关Gateway

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

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

    不同的微服务一般会有不同的网络地址,客户端在访问这些微服务时必须记住几十甚至几百个地址,这对于客户端方来说太复杂也难以维护。 如果让客户端直接与各个微服务通讯,可能会有很多问题: 客户端会请求多个不同的服务,需要维护不同的请求地址,增加开发难度

    2024年02月08日
    浏览(54)
  • 【SpringCloud】Gateway服务网关

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

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

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

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

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

    2024年02月01日
    浏览(54)
  • 8.Gateway服务网关

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

    2024年01月24日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包