当前位置: 首页 > wzjs >正文

幼儿园网站的建设需求分析百度公司图片

幼儿园网站的建设需求分析,百度公司图片,建设银行在上海的招聘网站,商务网站建设怎样收费文章目录 三.Spring Cloud Gateway网关3.1什么是网关3.2GeteWay能做什么3.3 核心概念3.4 SpringBoot中配置GateWayGateWay搭建示例【自定义路由】路由过滤器请求头过滤器配置示例(局部过滤器)默认过滤器配置示例(全局过滤器)自定义…

文章目录

  • 三.Spring Cloud Gateway网关
    • 3.1什么是网关
    • 3.2GeteWay能做什么
    • 3.3 核心概念
    • 3.4 SpringBoot中配置GateWay
      • GateWay搭建示例
      • 【自定义路由】
      • 路由过滤器
        • 请求头过滤器配置示例(局部过滤器)
        • 默认过滤器配置示例(全局过滤器)
        • 自定义全局路由过滤器
      • 网关限流
      • 网关限流实现

三.Spring Cloud Gateway网关

3.1什么是网关

在这里插入图片描述

存在问题:

  1. 如果添加鉴权功能,需要对每一个服务进行改造

  2. 跨域问题需要对每一个服务进行改造

网关就是当前微服务项目的"统一入口"

在这里插入图片描述

扩展:	其实Nginx也可以作为网关,但是要使用Nginx自主实现网关的相关功能,还需要借助lua脚本语言学习成本是比较高的,现在一般也不会使用它来做网关,但是只按性能来讲Nginx,性能是最高的。

3.2GeteWay能做什么

  • 反向代理
  • 鉴权
  • 流量控制
  • 熔断
  • 日志监控

在这里插入图片描述

3.3 核心概念

Router(路由)

  • 路由时构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由

Predicate(断言)

  • 断言说简单点,就是请求匹配条件。断言是定义匹配条件,如果请求符合条件,则该请求匹配断言所属的路由

Filter(过滤)

  • 指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。

3.4 SpringBoot中配置GateWay

GateWay搭建示例

创建cloud-gatway-8080项目,父工程依旧是cloud-alibaba-test02

在这里插入图片描述

【首先导入依赖】

<!--注意我这里没有引入父工程,而是springboot父启动依赖,也不要引入web依赖而是webflux--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><!--网关jar--><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>

Spring cloud gateway是基于webflux的,如果非要web支持的话需要导入spring-boot-starterwebflux而不是spring-boot-start-web

应用启动类添加注解 @EnableDiscoveryClient

【编写application.yml】

server:port: 8080
spring:application:name: cloud-gatwaycloud:nacos:discovery:username: nacospassword: nacosserver-addr: 127.0.0.1:8848gateway:discovery:locator:enabled: true #表明gateway开启服务注册和发现的功能,gateway为每一个服务创建自动一个router,这个router将以服务名开头的请求路径转发到对应的服务。lower-case-service-id: false #请求路径的服务名改为小写

启动项目,输入路径 ip+gateway端口号+要请求的服务名+controller地址

如:http://127.0.0.1:8070/bill-consumer-7790/user/findUserById?id=3

在这里插入图片描述

测试成功!!!!

注意:新版本无法使用,权限不足,需要配置自定义路由

【自定义路由】

server:port: 8080
spring:application:name: cloud-gatway #注册中心注册服务名称cloud:nacos:discovery:username: nacospassword: nacosserver-addr: 127.0.0.1:8848  # nacos注册中心地址gateway:discovery:locator:enabled: false #关闭服务发现 #表明gateway开启服务注册和发现的功能,gateway为每一个服务创建自动一个router,这个router将以服务名开头的请求路径转发到对应的服务。lower-case-service-id: true #服务名小写routes:- id: bill-consumer #路由id唯一,没有实际意义,可以随便写uri: http://127.0.0.1:7790 #lb表示负载均衡,后面接服务名,服务名必须和注册中心保持一致, 也可以使用http:IP+服务端predicates:  #断言- Path=/bc/** #  路径需携带bcfilters:- StripPrefix=1  #路由去掉前缀信息 使用内置过滤器

在这里插入图片描述

在这里插入图片描述

注意yml格式 空格 关闭gateway开启服务注册和发现的功能 否则自定义不生效

routes 后面的路由可以配置多个,相当于配置个数组,一个-开头的配置就是其中的一个数组元素

路由主要有四个配置:

  • 路由id(id)
  • 路由目标(uri)
  • 路由断言(predicates):判断路由的规则,
  • 路由过滤器(filters):对请求或响应做处理

依次启动bill-provider-7780,bill-consumer-7790,cloud-gateay-8080,

访问:http://127.0.0.1:8080/bc/bill/getId?id=1

在这里插入图片描述

在这里插入图片描述

路由过滤器

在这里插入图片描述

客户端请求先找到路由,路由匹配时经过过滤器层层筛选,最终访问到微服务。

请求头过滤器配置示例(局部过滤器)

filters: # 过滤器配置

在这里插入图片描述

server:port: 8080
spring:application:name: cloud-gatway #注册中心注册服务名称cloud:nacos:discovery:username: nacospassword: nacosserver-addr: 127.0.0.1:8848  # nacos注册中心地址gateway:discovery:locator:enabled: false #关闭服务发现 #表明gateway开启服务注册和发现的功能,gateway为每一个服务创建自动一个router,这个router将以服务名开头的请求路径转发到对应的服务。lower-case-service-id: true #服务名小写routes:- id: bill-consumer #路由id唯一,没有实际意义,可以随便写uri: http://127.0.0.1:7790 #lb表示负载均衡,后面接服务名,服务名必须和注册中心保持一致, 也可以使用http:IP+服务端predicates:  #断言- Path=/bc/** #  路径需携带bcfilters:- StripPrefix=1  #路由去掉前缀信息 使用内置过滤器- AddResponseHeader=kwh,666  #添加请求头,给所有进入bill-consumer的请求添加一个请求头。请求头的key为kwh,value为666

在这里插入图片描述

测试:

http://127.0.0.1:8080/bc/bill/getId?id=1

在这里插入图片描述

在这里插入图片描述

默认过滤器配置示例(全局过滤器)
server:port: 8080
spring:application:name: cloud-gatway #注册中心注册服务名称cloud:nacos:discovery:username: nacospassword: nacosserver-addr: 127.0.0.1:8848  # nacos注册中心地址gateway:discovery:locator:enabled: false #关闭服务发现 #表明gateway开启服务注册和发现的功能,gateway为每一个服务创建自动一个router,这个router将以服务名开头的请求路径转发到对应的服务。lower-case-service-id: true #服务名小写routes:- id: bill-consumer #路由id唯一,没有实际意义,可以随便写uri: http://127.0.0.1:7790 #lb表示负载均衡,后面接服务名,服务名必须和注册中心保持一致, 也可以使用http:IP+服务端predicates:  #断言- Path=/bc/** #  路径需携带bcfilters:- StripPrefix=1  #路由去掉前缀信息 使用内置过滤器- AddRequestHeader=kwh,666  #添加请求头,给所有进入bill-consumer的请求添加一个请求头。请求头的key为kwh,value为666default-filters:  #全局过滤器- AddRequestHeader=token,888

default-filters 的配置和routes平级。

只要配置在 default-filters 下面的过滤器,会对routes配置的所有路由都生效。

在这里插入图片描述

http://127.0.0.1:8080/bc/bill/getId?id=1

在这里插入图片描述

在这里插入图片描述

自定义全局路由过滤器

有时候SpringCloudGateWay提供的过滤器工厂不能满足自己的要求。

可能有时候需要在过滤时做一些其它的逻辑操作。那么这时候可以选择使用java代码自定义全局过滤器。

创建GateWayFilter类 实现接口GlobalFilter与Ordered

在这里插入图片描述

@Component
@Order(1)
public class GateWayFilter1 implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 获取请求头String token = exchange.getRequest().getHeaders().getFirst("token");System.out.println("tokenzdy"+token);// 获取请求路径中的参数 如idMultiValueMap<String, String> queryParams = exchange.getRequest().getQueryParams();String id = queryParams.getFirst("id");System.out.println("id"+id);// 放行if (id != null && id.equals("1")) {return chain.filter(exchange);}// 拦截 响应exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);return exchange.getResponse().setComplete();}
}
@Component
@Order(2)
public class GateWayFilter2 implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("过滤器2...");return chain.filter(exchange);}
}

测试:

http://127.0.0.1:8080/bc/bill/getId?id=1

在这里插入图片描述

在这里插入图片描述

网关限流

网关可以做很多的事情,比如,限流,当我们的系统 被频繁的请求的时候,就有可能 将系统压垮,所以 为了解决这个问题,需要在每一个微服务中做限流操作,但是如果有了网关,那么就可以在网关系统做限流,因为所有的请求都需要先通过网关系统才能路由到微服务中。

在这里插入图片描述

令牌桶算法是比较常见的限流算法之一,大概描述如下:

  • 所有的请求在处理之前都需要拿到一个可用的令牌才会被处理;
  • 根据限流大小,设置按照一定的速率往桶里添加令牌;
  • 桶设置最大的放置令牌限制,当桶满时、新添加的令牌就被丢弃或者拒绝;
  • 请求达到后首先要获取令牌桶中的令牌,拿着令牌才可以进行其他的业务逻辑,处理完业务逻辑之后,将令牌直接删除;
  • 令牌桶有最低限额,当桶中的令牌达到最低限额的时候,请求处理完之后将不会删除令牌,以此保证足够的限流

在这里插入图片描述

网关限流实现

(继续完善cloud-gatway-8080)

需求:每个ip地址1秒内只能发送1次请求,多出来的请求返回429错误。

spring cloud gateway 默认使用redis的 RateLimter 限流算法来实现。所以我们要使用首先需要引入redis的依赖

<!--redis 限流-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>

【在config包下创建ResolverConfig类】

/*** @Author: weiyi* @Description: 限流规则配置* @Date 2025/2/12* @ClassName ResolveConfig* @Version 1.0*/@Configuration
public class ResolverConfig {@Bean@Primarypublic KeyResolver ipKeyResolver(){// 根据ip限流return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName());}}

KeyResolver 用于计算某一个类型的限流的KEY也就是说,可以通过KeyResolver 来指定限流的Key。

【修改application.yml中配置项,指定限制流量的配置以及 redis 的配置】

在这里插入图片描述

在这里插入图片描述

server:port: 8080
spring:redis:password: 123456host: 127.0.0.1port: 6380application:name: cloud-gatway #注册中心注册服务名称cloud:nacos:discovery:username: nacospassword: nacosserver-addr: 127.0.0.1:8848  # nacos注册中心地址gateway:discovery:locator:enabled: false #关闭服务发现 #表明gateway开启服务注册和发现的功能,gateway为每一个服务创建自动一个router,这个router将以服务名开头的请求路径转发到对应的服务。lower-case-service-id: true #服务名小写routes:- id: bill-consumer #路由id唯一,没有实际意义,可以随便写uri: http://127.0.0.1:7790 #lb表示负载均衡,后面接服务名,服务名必须和注册中心保持一致, 也可以使用http:IP+服务端predicates:  #断言- Path=/bc/** #  路径需携带bcfilters:- StripPrefix=1  #路由去掉前缀信息 使用内置过滤器- AddRequestHeader=kwh,666  #添加请求头,给所有进入bill-consumer的请求添加一个请求头。请求头的key为kwh,value为666- name: RequestRateLimiter #请求限流,名字不能随便乱写args:# noinspection SpringBootApplicationYamlkey-resolver: "#{@ipKeyResolver}" #用于限流的键的解析器的 Bean 对象的名字。它使用SpEL 表达式根据#{@beanName}从 Spring 容器中获取 Bean 对象# noinspection SpringBootApplicationYamlredis-rate-limiter.replenishRate: 1 #令牌桶每秒填充平均速率# noinspection SpringBootApplicationYamlredis-rate-limiter.burstCapacity: 1 #令牌桶总容量。default-filters:  #全局过滤器- AddRequestHeader=token,888

解释:

  • burstCapacity :令牌桶总容量。
  • replenishRate :令牌桶每秒填充平均速率。
  • key-resolver :用于限流的键的解析器的 Bean 对象的名字。它使用 SpEL 表达式根据 #
  • {@beanName} 从 Spring 容器中获取 Bean 对象。

【测试】

启动项目,快速刷新在一秒钟刷新多次,请求失败就会报错429,一秒钟刷新一次会成功。(redis启动,nacos启动)

在这里插入图片描述

在这里插入图片描述

其他限流规则

  • 参数限流: key-resolver: "#{@parameterKeyResolver}"
@Beanpublic KeyResolver parameterKeyResolver(){return exchange ->Mono.just(exchange.getRequest().getQueryParams().getFirst("userId"));}
  • URI限流 : key-resolver: "#{@pathKeyResolver}"
 /*** 限流规则配置类 多个bean时其中一个bean添加@Primary注解*/@Configurationpublic class KeyResolverConfiguration{@Beanpublic KeyResolver pathKeyResolver(){return exchange -> Mono.just(exchange.getRequest().getURI().getPath());}}
http://www.dtcms.com/wzjs/270091.html

相关文章:

  • wordpress wp_post深圳seo推广培训
  • 个人做外包网站多少钱成都seo学徒
  • dw做网站的导航栏优化大师优化项目有
  • 互联网站备案信息seo成功案例分析
  • 怎么在网上做公司的网站软文营销经典案例200字
  • 高手做网站武汉seo推广优化公司
  • 工厂网站建设公司搜索引擎推广培训
  • 手机做炫光头像图的网站赣州网站seo
  • seo外包优化服务商春哥seo博客
  • 做网站百度收费吗营销策划公司取名大全
  • 让别人做的网站不给源代码网络营销推广策划书
  • 和龙市建设局网站5118网站查询
  • 永康企业网站建设公司美国今天刚刚发生的新闻
  • wordpress 多商户seo网络推广培训
  • 牙科医院网站建设方案seo推广公司
  • 广州网站建设易得怎么做好网络营销
  • 微官网和微网站广告联盟代理平台
  • 如何维护公司网站营销网站制作公司
  • 有域名怎么建网站seo教育
  • 中国建设工程造价管理网站seo的外链平台有哪些
  • 如何看别人网站用什么做的网站设计说明
  • 做易拉宝的素材网站自助建站工具
  • 网站开发与维护难吗网易游戏推广代理加盟
  • 贵州省建设厅二建报名网站建立一个网站需要多少钱?
  • 广西长长路桥建设有限公司网站免费网络推广软件有哪些
  • 在淘宝上做代销哪个网站好百度云登录入口
  • 网站 虚拟空间全国防疫大数据平台
  • 如何写一份食品的网站建设规划7个经典软文营销案例
  • 展厅设计作品欣赏案例武汉seo人才
  • 网站建设基本内容自助建站网站模板