微服务SpringCloud之GateWay服务化和过滤器

Spring Cloud Gateway 提供了一种默认转发的能力,只要将 Spring Cloud Gateway 注册到服务中心,Spring Cloud Gateway 默认就会代理服务中心的所有服务。

一、服务网关注册到注册中心

这里服务和注册中心使用前面博客中的EurekaServer和EurekaClient。服务网关注册到注册中心只需引入依赖包和增加配置。

1.引入依赖包spring-cloud-starter-netflix-eureka-client

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2.在application.yml中增加配置

server:
  port: 8081
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8088/eureka/
logging:
  level:
    org.springframework.cloud.gateway: debug
spring:
  application:
    name: SpringCloudGatewayDemo
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
#       - id: method_route
#         uri: http://www.cnblogs.com
#         predicates:
#          - Method=GET
#          - Path=/5ishare/{segment}
      - id: query_route
        uri: http://www.cnblogs.com

spring.cloud.gateway.discovery.locator.enabled:是否与服务注册于发现组件进行结合,通过 serviceId 转发到具体的服务实例。默认为 false,设为 true 便开启通过服务中心的自动根据 serviceId 创建路由的功能。
eureka.client.service-url.defaultZone指定注册中心的地址,以便使用服务发现功能
logging.level.org.springframework.cloud.gateway 调整相 gateway 包的 log 级别,以便排查问题

3.测试

依次启动EurekaServer、EurekaClient、SpringCloudGatewayDemo。在浏览器输入http://localhost:8088/,如图一注册中心有SPRING-CLOUD-PRODUCER、SPRINGCLOUDGATEWAYDEMO两个应用。

输入http://localhost:9003/hello?name=cuiyw,EurekaClient显示正常。

将 Spring Cloud Gateway 注册到服务中心之后,网关会自动代理所有的在注册中心的服务,访问这些服务的语法为:http://网关地址:端口/服务中心注册 serviceId/具体的url。

输入http://localhost:8081/SPRING-CLOUD-PRODUCER/hello?name=cuiyw时页面显示EurekaClient的内容。

二、过滤器

Spring Cloud Gateway 的 Filter 的生命周期不像 Zuul 的那么丰富,它只有两个:“pre” 和 “post”。
PRE: 这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的 HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。

Spring Cloud Gateway 的 Filter 分为两种:GatewayFilter 与 GlobalFilter。GlobalFilter 会应用到所有的路由上,而 GatewayFilter 将应用到单个路由或者一个分组的路由上。
Spring Cloud Gateway 内置了9种 GlobalFilter,比如 Netty Routing Filter、LoadBalancerClient Filter、Websocket Routing Filter 等,根据名字即可猜测出这些 Filter 的作用,具体大家可以参考官网内容:Global Filters
利用 GatewayFilter 可以修改请求的 Http 的请求或者响应,或者根据请求或者响应做一些特殊的限制。 更多时候我们会利用 GatewayFilter 做一些具体的路由配置,下面我们做一些简单的介绍。

我们以 AddRequestParameter GatewayFilter 来演示一下,如何在项目中使用 GatewayFilter,AddRequestParameter GatewayFilter 可以在请求中添加指定参数。

1、修改EurekaClient

如下图所示,启动了两个EurekaClient客户端,为了区分,在一个客户端实例增加了两个!!。

2.增加Filter配置

server:
  port: 8081
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8088/eureka/
logging:
  level:
    org.springframework.cloud.gateway: debug
spring:
  application:
    name: SpringCloudGatewayDemo
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
       - id: add_request_parameter_route
         uri: lb://spring-cloud-producer
         filters:
         - AddRequestParameter=name, cuiyw
         predicates:
            - Method=GET
#       - id: method_route
#         uri: http://www.cnblogs.com
#         predicates:
#          - Method=GET
#          - Path=/5ishare/{segment}
       - id: query_route
         uri: http://www.cnblogs.com
         predicates:
          - Query=name,cuiyw
          - RemoteAddr=192.168.0.1/16
#       - id: cookie_route
#         uri: http://www.cnblogs.com
#         predicates:
#           - Cookie=name,cuiyw
#           - Header=X-Request-Id, \d+
#       - id: time_route
#         uri: http://www.cnblogs.com
#         predicates:
#          -After=2019-11-03T10:20:06+08:00[Asia/Shanghai]
#          - Before=2019-11-03T10:55:06+08:00[Asia/Shanghai]
#          - Between=2019-11-03T11:01:06+08:00[Asia/Shanghai], 2019-11-03T11:05:06+08:00[Asia/Shanghai]
#      - id: neo_route
#        uri: http://www.cnblogs.com
#        predicates:
#          - Path=/5ishare

#      - id: header_route
#        uri: http://ityouknow.com
#        predicates:
#        - Header=X-Request-Id, \d+
#      - id: host_route
#        uri: http://ityouknow.com
#        predicates:
#        - Host=**.ityouknow.com

#      - id: host_route
#        uri: http://ityouknow.com
#        predicates:
#        - Path=/foo/{segment}
#      - id: query_route
#        uri: http://ityouknow.com
#        predicates:
#         - Query=keep, pu.
#      - id: remoteaddr_route
#        uri: http://ityouknow.com
#        predicates:
#        - RemoteAddr=192.168.126.218/24

上面配置文件增加了add_request_parameter_route路由,该路由作用是在spring-cloud-producer服务的get请求url增加参数,类似在url的问号后面增加key=value键值对name=cuiyw.

3.测试

重启EurekaClient和GateWay,在浏览器中输入http://localhost:8081/hello,则交替出现如下两个页面的结果,实现了服务化路由转发。

原文地址:https://www.cnblogs.com/5ishare/p/11831586.html

时间: 2024-08-30 17:09:21

微服务SpringCloud之GateWay服务化和过滤器的相关文章

微服务SpringCloud之GateWay路由

在前面博客学习了网关zuul,今天学下spring官方自带的网关spring cloud gateway.Zuul(1.x) 基于 Servlet,使用阻塞 API,它不支持任何长连接,如 WebSockets,Spring Cloud Gateway 使用非阻塞 API,支持 WebSockets,支持限流等新特性. Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project R

微服务SpringCloud+Docker入门到高级实战

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧2.技术选型和学后水平简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构简介:讲解单机应用和分布式应用架构演进基础知识 (画图)2.微服务核心基础讲解简介:讲解微服务核心知识 :网关.服务发现注册.配置中心.链路追踪.负载均衡器.熔断3.常见的微服务框架简介:讲解常用的微服务框架4.微服务下

小D课堂 - 新版本微服务springcloud+Docker教程_汇总

小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介 小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型 小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构 原文地址:https://www.cnblogs.com/wangjunwei/p/11434371.html

微服务SpringCloud+Docker入门到高级实战(教程详情)

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍 简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧 2.技术选型和学后水平 简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 1.IDEA JDK8 Maven SpringBoot基础 Linux 2.理解掌握并开发SpringCloud里面主流架构和组件的基础使用,还有部分源码原理的理解 3.掌握学习的技巧和解决问题的思路 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构 简介:讲

微服务SpringCloud+Docker入门到高级实战(目录)

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍 简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧2.技术选型和学后水平 简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构 简介:讲解单机应用和分布式应用架构演进基础知识 (画图)2.微服务核心基础讲解 简介:讲解微服务核心知识 :网关.服务发现注册.配置中心.链路追踪.负载均衡器.熔断3.常见的微服务框架 简介:讲解常用的微服务框架4

微服务SpringCloud之服务网关zuul一

前面学习了Eureka.Feign.Hystrix.Config,本篇来学习下API网关zuul.在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务.当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端. 为什么需要API Gateway 1.简化客户端调用复杂度 在微服务架构模式下后端服务的实例数一般是动态的,对于客户端而言很难发现动态改变的服务实例的访问地址信息

微服务-springcloud

感觉微服务都差不多概念,最近稍微看了下springcloud,感觉入门还是很简单的,框架用用就那么回事,深入的话需要很多时间投入了 学一个东西,我推荐首先从概念上了解到他是做什么的,什么时候需要,基本模块是什么,然后可以自己写一些小的例子,后续根据需要深入到探寻源码 某位热心同学写的入门例子,我下载学习了下:http://git.oschina.net/zhou666/spring-cloud-7simple 集成了了Netfix的一些关键组件: 服务发现--Netflix Eureka 客服端

微服务SpringCloud容器化案例

前言 当我们在使用微服务的时候,那么有一个问题一定会困扰我们,那就是项目的测试和部署.因为在单体应用下,部署项目很简单,直接打包启动就可以了,而对于微服务来说,因为有各个组件的存在所以让测试和部署都变得很麻烦,而容器化是微服务的部署一把利剑. PS:本文不介绍具体docker使用的各种基础,以及微服务的各种基础,就是给出相应的案例,你可以根据这样的案例快速学会如何将你的微服务容器化. 实际案例 让我们先来看看,实现之后如果本地要进行测试,是多么方便. ? 只需要一个命令,就能将我们的服务都启动起

微服务SpringCloud无法进行服务消费

最近用SpringCloud做微服务,一直无法成功进行服务消费. 我使用的服务消费者是Feign,声明式调用服务提供者. 排查过程 1.检查服务提供者: (1)对提供的方法进行测试,确保提供的服务没有问题. (2)是否在控制层上方添加了@Controller. (3)方法的method是否正确.是GET还是POST. 2.仔细检查服务消费者: (1)服务名value是否正确.服务名不一定是项目名,要检查服务提供者的application配置文件,对应的spring.application.nam