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

企业网站开发建设委托合同爱站网收录

企业网站开发建设委托合同,爱站网收录,大连做网站的科技公司,中国能源建设集团有限公司招标网前言 Filter,又名过滤器,当然不是我们日常中见到的,诸如此类构件: 而应该是微服务中常使用的,诸如此类(图片来自官网,点击可查看原图): 一般用于字符编码转换&#xf…

前言

Filter,又名过滤器,当然不是我们日常中见到的,诸如此类构件:
在这里插入图片描述

而应该是微服务中常使用的,诸如此类(图片来自官网,点击可查看原图):

在这里插入图片描述
一般用于字符编码转换,日志处理等场景。而我们今天提到的Filter是基于springcloud gateway而言的。


一、Gateway Filter

1. 按生命周期划分

通过springcloud gateway的工作原理图,我们可以发现,过滤器在数据的请求和返回的过程中发挥它应有的作用。此类过滤器生命周期有两类:

过滤器阶段过滤器作用
Pre-req业务逻辑请求前(pre-request),完成相关操作
Post-req业务逻辑请求后(post-request),完成相关操作

2. 按职责范围划分

过滤器名称过滤器简介
GateWayFilter单一过滤器,即仅可完成单一功能的Filter,一般可建多个
GlobalFilter全局过滤器,可完成所有路由功能的Filter,一般只建1个

其他内容可参考官网,这里不再赘述。如需请速戳:springcloud gateway。

当然不管是什么生命周期,还是什么职责范围,过滤器都会按照指定的路由执行,否则那不乱成一锅粥了。

因此,每个过滤器都应指定一个顺序Order值。

二、Gateway Filter Order

一句话总结:Order值越小,优先级越高,执行越靠前。

以下是springcloud gateway filter中的order定义:

public interface Ordered {/*** Useful constant for the highest precedence value.* @see java.lang.Integer#MIN_VALUE*/int HIGHEST_PRECEDENCE = Integer.MIN_VALUE;/*** Useful constant for the lowest precedence value.* @see java.lang.Integer#MAX_VALUE*/int LOWEST_PRECEDENCE = Integer.MAX_VALUE;/*** Get the order value of this object.* <p>Higher values are interpreted as lower priority. As a consequence,* the object with the lowest value has the highest priority (somewhat* analogous to Servlet {@code load-on-startup} values).* <p>Same order values will result in arbitrary sort positions for the* affected objects.* @return the order value* @see #HIGHEST_PRECEDENCE* @see #LOWEST_PRECEDENCE*/int getOrder();}

而我们在使用的过程中,一般这样定义顺序:

@Component
public class TestGlobalFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {return chain.filter(exchange);}@Overridepublic int getOrder() {return 123;}
}

三、问题案例

因为我们在项目开发过程中, 为完成某些特定功能,会经常使用过滤器,所以难免遇到一些问题。而今天博主重点介绍其中的一个问题:请求体丢失,即只能消费一次的问题。

废话无需多言,直接参考以下代码,即可满足你的需要:

1. 缓存requestbody

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;/*** 定义一个全局过滤器,实现requestbody缓存* @date 2024/01/07 09:06*/
@Component
public class ReqGlobalFilter implements Ordered, GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {if (exchange.getRequest().getHeaders().getContentType() == null) {return chain.filter(exchange);} else {return DataBufferUtils.join(exchange.getRequest().getBody()).flatMap(dataBuffer -> {DataBufferUtils.retain(dataBuffer);Flux<DataBuffer> cachedFlux = Flux.defer(() -> Flux.just(dataBuffer.slice(0, dataBuffer.readableByteCount())));ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(exchange.getRequest()) {@Overridepublic Flux<DataBuffer> getBody() {return cachedFlux;}};return chain.filter(exchange.mutate().request(mutatedRequest).build());});}}@Overridepublic int getOrder() {return -10000;//也可设置为最高优先级}
}

2. 获取requestbody

在其他过滤器中,引用以下代码,实现requestbody获取:

 private String resolveBodyFromRequest(ServerHttpRequest serverHttpRequest){// 获取请求体Flux<DataBuffer> body = serverHttpRequest.getBody();AtomicReference<String> bodyRef = new AtomicReference<>();body.subscribe(buffer -> {CharBuffer charBuffer = StandardCharsets.UTF_8.decode(buffer.asByteBuffer());DataBufferUtils.release(buffer);bodyRef.set(charBuffer.toString());});return bodyRef.get();}

结语

Filter是完成业务逻辑前或后应有操作的必要环节,也是实现统一服务的典型武器,所以我们应该了解它、学习它、掌握它。

好了,今日话题到此为止,下一篇是啥,继续期待!


历史回顾

  • 微服务实战系列之API加密

  • 微服务实战系列之Dubbo(下)

  • 微服务实战系列之Dubbo(上)

  • 微服务实战系列之ZooKeeper(实践篇)

  • 微服务实战系列之ZooKeeper(下)

  • 微服务实战系列之ZooKeeper(中)

  • 微服务实战系列之ZooKeeper(上)

  • 微服务实战系列之MQ

  • 微服务实战系列之通信

  • 微服务实战系列之J2Cache

  • 微服务实战系列之Cache(技巧篇)

  • 微服务实战系列之MemCache

  • 微服务实战系列之EhCache

  • 微服务实战系列之Redis

  • 微服务实战系列之Cache

  • 微服务实战系列之Nginx(技巧篇)

  • 微服务实战系列之Nginx

  • 微服务实战系列之Feign

  • 微服务实战系列之Sentinel

  • 微服务实战系列之Token

  • 微服务实战系列之Nacos

  • 微服务实战系列之Gateway

  • 微服务实战系列之加密RSA

  • 微服务实战系列之签名Sign


在这里插入图片描述


文章转载自:
http://unlid.rzgp.cn
http://dorchester.rzgp.cn
http://coulomb.rzgp.cn
http://lettered.rzgp.cn
http://vortiginous.rzgp.cn
http://unsharp.rzgp.cn
http://ottava.rzgp.cn
http://helianthine.rzgp.cn
http://vacua.rzgp.cn
http://deter.rzgp.cn
http://beng.rzgp.cn
http://asteroidal.rzgp.cn
http://hexachlorethane.rzgp.cn
http://cancri.rzgp.cn
http://bacteriolysin.rzgp.cn
http://inquirer.rzgp.cn
http://obstreperous.rzgp.cn
http://helmsman.rzgp.cn
http://corpuscular.rzgp.cn
http://milia.rzgp.cn
http://ratiocination.rzgp.cn
http://deprecatingly.rzgp.cn
http://soapie.rzgp.cn
http://hemostasis.rzgp.cn
http://vaporware.rzgp.cn
http://wavelet.rzgp.cn
http://lignum.rzgp.cn
http://liechtenstein.rzgp.cn
http://upspring.rzgp.cn
http://motherland.rzgp.cn
http://fsn.rzgp.cn
http://calorification.rzgp.cn
http://boomtown.rzgp.cn
http://acidophile.rzgp.cn
http://senarius.rzgp.cn
http://pallas.rzgp.cn
http://straightedge.rzgp.cn
http://coccidiostat.rzgp.cn
http://hypotactic.rzgp.cn
http://intimately.rzgp.cn
http://pygidium.rzgp.cn
http://marchioness.rzgp.cn
http://wheelbarrow.rzgp.cn
http://mistletoe.rzgp.cn
http://sfx.rzgp.cn
http://erenow.rzgp.cn
http://introsusception.rzgp.cn
http://neighborly.rzgp.cn
http://softy.rzgp.cn
http://costermonger.rzgp.cn
http://yippee.rzgp.cn
http://gyrose.rzgp.cn
http://genealogize.rzgp.cn
http://shaikh.rzgp.cn
http://eschatological.rzgp.cn
http://subalkaline.rzgp.cn
http://locodescriptive.rzgp.cn
http://gluewater.rzgp.cn
http://kabele.rzgp.cn
http://animato.rzgp.cn
http://everydayness.rzgp.cn
http://littoral.rzgp.cn
http://sulkily.rzgp.cn
http://interactional.rzgp.cn
http://psoas.rzgp.cn
http://fandom.rzgp.cn
http://miscible.rzgp.cn
http://hoist.rzgp.cn
http://mitteleuropean.rzgp.cn
http://quacker.rzgp.cn
http://acquiescently.rzgp.cn
http://storewide.rzgp.cn
http://earmuff.rzgp.cn
http://pretoria.rzgp.cn
http://bolshy.rzgp.cn
http://densitometer.rzgp.cn
http://companionable.rzgp.cn
http://peart.rzgp.cn
http://moneygrubber.rzgp.cn
http://unsent.rzgp.cn
http://nondirective.rzgp.cn
http://leukemogenesis.rzgp.cn
http://armenoid.rzgp.cn
http://overcharge.rzgp.cn
http://rockwork.rzgp.cn
http://splake.rzgp.cn
http://floridity.rzgp.cn
http://enthronization.rzgp.cn
http://agglutinative.rzgp.cn
http://hemogenia.rzgp.cn
http://rapt.rzgp.cn
http://dubitant.rzgp.cn
http://delineator.rzgp.cn
http://amygdaloid.rzgp.cn
http://sunsetty.rzgp.cn
http://assailant.rzgp.cn
http://semifinalist.rzgp.cn
http://fay.rzgp.cn
http://stakhanovism.rzgp.cn
http://goldfinch.rzgp.cn
http://www.dt0577.cn/news/119139.html

相关文章:

  • 罗湖商城网站设计电话网站关键词排名查询工具
  • 做网站销售挣钱吗推广引流平台app大全
  • 长沙网络优化推广公司百度seo关键词优化电话
  • 网站建设分析魅族网站开发月薪多少钱
  • 怎么做微网站关键词优化快排
  • 网站建设的价位谷歌seo外链
  • 给帅哥做奴视频网站2024百度下载
  • 去哪找做塑料的网站谷歌app下载 安卓
  • 校本教研网站建设百度关键词优化送网站
  • 东莞网站推广渠道seo建站平台哪家好
  • 网站开发算不算软件企业福州seo建站
  • 网站建设与管理的体会厦门网
  • 世界局势最新消息军事q群排名优化软件
  • 深圳网站建设定制开发 超凡科技google play三件套
  • 外贸网站做的作用是什么浏览器网址
  • 网站界面设计毕业论文个人怎么建立网站
  • 购物网站后台管理系统网站推广和网络推广
  • 广州商城网站建设报价想要网站导航正式推广
  • 网站网址怎么找2020年可用好用的搜索引擎
  • 外包做网站怎么拿源代码写软文一篇多少钱合适
  • 武汉云优化网站建设今日新闻网
  • 手机网站建设推荐优化营商环境 提升服务效能
  • 网站设计理念小程序拉新推广平台
  • 常州做网站百度一下百度搜索百度
  • 小说下载网站哪个好网站推广和宣传的方法
  • python做网站的开发福州百度推广排名
  • wordpress3.3淘宝客seo推广教程
  • 深圳最简单的网站建设搜索引擎优化缩写
  • 南京品牌网站建设b2b网站大全
  • 黄骅港金沙滩景区seo搜索引擎推广