Spring Cloud Gateway核心之Filter、自定义全局Filter、自定义局部Filter介绍

SpringCloudGateway-核心之Filter-自定义全局Filter-自定义局部Filter介绍

核心之Filter

路由过滤器允许以某种方式修改传入的 HTTP 请求或传出的 HTTP 响应。
路由过滤器的范围仅限于特定路由。
Spring Cloud Gateway 包含许多内置的 GatewayFilter Factory。

AddRequestHeader网关过滤器工厂

AddRequestHeader GatewayFilter Factory 采用名称和值参数。

例子:这会将X-Request-Foo:Bar标头添加到所有匹配请求的下游请求标头中。
spring:cloud:gateway:routes:- id: add_request_header_routeuri: https://example.orgfilters:- AddRequestHeader=X-Request-Foo, Bar
AddRequestHeader 知道用于匹配路径或主机的 URI 变量。URI 变量可以在值中使用,并将在运行时扩展。
spring:cloud:gateway:routes:- id: add_request_header_routeuri: https://example.orgpredicates:- Path=/foo/{segment}filters:- AddRequestHeader=X-Request-Foo, Bar-{segment}

添加请求参数网关过滤器工厂

AddRequestHeader GatewayFilter Factory 采用名称和值参数。

例子:这将添加foo=bar到所有匹配请求的下游请求的查询字符串中。
spring:cloud:gateway:routes:- id: add_request_parameter_routeuri: https://example.orgfilters:- AddRequestParameter=foo, barAddRequestParameter 知道用于匹配路径或主机的 URI 变量。URI 变量可以在值中使用,并将在运行时扩展。
spring:cloud:gateway:routes:- id: add_request_parameter_routeuri: https://example.orgpredicates:- Host: {segment}.myhost.orgfilters:- AddRequestParameter=foo, bar-{segment}

添加响应头网关过滤器工厂

AddResponseHeader GatewayFilter Factory 采用名称和值参数。

例子:这会将X-Response-Foo:Bar标头添加到所有匹配请求的下游响应标头中。
spring:cloud:gateway:routes:- id: add_response_header_routeuri: https://example.orgfilters:- AddResponseHeader=X-Response-Foo, BarAddResponseHeader 知道用于匹配路径或主机的 URI 变量。URI 变量可以在值中使用,并将在运行时扩展。
spring:cloud:gateway:routes:- id: add_response_header_routeuri: https://example.orgpredicates:- Host: {segment}.myhost.orgfilters:- AddResponseHeader=foo, bar-{segment}

DedupeResponseHeader 网关过滤器工厂

DedupeResponseHeader GatewayFilter Factory 采用一个name参数和一个可选strategy参数。name可以包含标头名称列表,以空格分隔。

例子:当网关 CORS 逻辑和下游都添加重复值Access-Control-Allow-Credentials和响应标头时,这将删除它们。Access-Control-Allow-Origin
DedupeResponseHeader 过滤器还接受可选strategy参数。接受的值为RETAIN_FIRST(默认)、RETAIN_LAST和RETAIN_UNIQUE。
spring:cloud:gateway:routes:- id: dedupe_response_header_routeuri: https://example.orgfilters:- DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin

Hystrix 网关过滤器工厂

Hystrix是 Netflix 的一个库,它实现了断路器模式。Hystrix GatewayFilter 允许您在网关路由中引入断路器,保护您的服务免受级联故障的影响,并允许您在出现下游故障时提供回退响应。
要在项目中启用 Hystrix GatewayFilters,请添加spring-cloud-starter-netflix-hystrix来自Spring Cloud Netflix 的依赖项。

Hystrix GatewayFilter Factory 需要一个name参数,即HystrixCommand.spring:cloud:gateway:routes:- id: hystrix_routeuri: https://example.orgfilters:- Hystrix=myCommandName
这将剩余的过滤器包装在HystrixCommandwith command name中myCommandName。Hystrix 过滤器还可以接受可选fallbackUri参数。目前,仅forward:支持方案 URI。如果调用后备,请求将转发到与 URI 匹配的控制器。spring:cloud:gateway:routes:- id: hystrix_routeuri: lb://backing-service:8088predicates:- Path=/consumingserviceendpointfilters:- name: Hystrixargs:name: fallbackcmdfallbackUri: forward:/incaseoffailureusethis- RewritePath=/consumingserviceendpoint, /backingserviceendpoint
/incaseoffailureusethis当 Hystrix 回退被调用时,这将转发到URI。lb请注意,此示例还通过目标 URI 上的前缀演示(可选)Spring Cloud Netflix Ribbon 负载平衡。主要场景是使用fallbackUri网关应用程序内的内部控制器或处理程序。但是,也可以将请求重新路由到外部应用程序中的控制器或处理程序,如下所示:spring:cloud:gateway:routes:- id: ingredientsuri: lb://ingredientspredicates:- Path=//ingredients/**filters:- name: Hystrixargs:name: fetchIngredientsfallbackUri: forward:/fallback- id: ingredients-fallbackuri: http://localhost:9994predicates:- Path=/fallback
在此示例中,网关应用程序中没有fallback端点或处理程序,但是,另一个应用程序中有一个端点或处理程序,在http://localhost:9994.如果请求被转发到回退,Hystrix Gateway 过滤器还会提供Throwable导致该请求的原因。它被添加到ServerWebExchange作为 ServerWebExchangeUtils.HYSTRIX_EXECUTION_EXCEPTION_ATTR在网关应用程序中处理回退时可以使用的属性。对于外部控制器/处理程序场景,可以添加包含异常详细信息的标头。您可以在FallbackHeaders GatewayFilter Factory 部分找到更多信息。Hystrix 设置(例如超时)可以使用全局默认值进行配置,也可以使用应用程序属性按路由进行配置,如Hystrix wiki中所述。要为上面的示例路由设置 5 秒超时,将使用以下配置:应用程序.yml。 hystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds : 5000

FallbackHeaders GatewayFilter 工厂

AddRequestHeader GatewayFilter Factory 采用名称和值参数。

例子:工厂FallbackHeaders允许您在转发到外部应用程序的请求的标头中添加 Hystrix 执行异常详细信息fallbackUri
spring:cloud:gateway:routes:- id: ingredientsuri: lb://ingredientspredicates:- Path=//ingredients/**filters:- name: Hystrixargs:name: fetchIngredientsfallbackUri: forward:/fallback- id: ingredients-fallbackuri: http://localhost:9994predicates:- Path=/fallbackfilters:- name: FallbackHeadersargs:executionExceptionTypeHeaderName: Test-Header
在此示例中,在运行 时发生执行异常后HystrixCommand,请求将被转发到fallback在 上运行的应用程序中的端点或处理程序localhost:9994。带有异常类型、消息以及(如果可用)根本原因异常类型和消息的标头将由过滤器添加到该请求中FallbackHeaders。
通过设置下面列出的参数值及其默认值,可以在配置中覆盖标头的名称:
executionExceptionTypeHeaderName( "Execution-Exception-Type")
executionExceptionMessageHeaderName( "Execution-Exception-Message")
rootCauseExceptionTypeHeaderName( "Root-Cause-Exception-Type")
rootCauseExceptionMessageHeaderName( "Root-Cause-Exception-Message")

MapRequestHeader网关过滤器工厂

MapRequestHeader GatewayFilter Factory 采用“fromHeader”和“toHeader”参数。它创建一个新的命名标头 (toHeader),并从传入的 http 请求中的现有命名标头 (fromHeader) 中提取该值。如果输入标头不存在,则过滤器没有影响。如果新的命名标头已经存在,那么它的值将使用新值进行扩充。

例子:这会将X-Request-Foo:<values>标头添加到下游请求,其中包含来自传入 http 请求Bar标头的更新值。
spring:cloud:gateway:routes:- id: map_request_header_routeuri: https://example.orgfilters:- MapRequestHeader=Bar, X-Request-Foo

PrefixPath 网关过滤器工厂

PrefixPath GatewayFilter Factory 采用单个prefix参数。

例子:这将/mypath作为所有匹配请求的路径的前缀。因此,请求/hello, 将被发送至/mypath/hello。
spring:cloud:gateway:routes:- id: prefixpath_routeuri: https://example.orgfilters:- PrefixPath=/mypath

PreserveHostHeader 网关过滤器工厂

PreserveHostHeader GatewayFilter Factory 没有参数。该过滤器设置一个请求属性,路由过滤器将检查该属性以确定是否应发送原始主机标头,而不是由 http 客户端确定的主机标头。

例子:这会将X-Request-Foo:Bar标头添加到所有匹配请求的下游请求标头中。
AddRequestHeader 知道用于匹配路径或主机的 URI 变量。URI 变量可以在值中使用,并将在运行时扩展。
spring:cloud:gateway:routes:- id: preserve_host_routeuri: https://example.orgfilters:- PreserveHostHeader

RequestRateLimiter网关过滤器工厂

RequestRateLimiter GatewayFilter Factory 使用RateLimiter实现来确定是否允许当前请求继续。如果不是,HTTP 429 - Too Many Requests则返回状态(默认情况下)。
该过滤器采用可选keyResolver参数和特定于速率限制器的参数(见下文)。
keyResolver是一个实现该接口的bean KeyResolver。在配置中,使用 SpEL 按名称引用 bean。#{@myKeyResolver}是引用名为 的 bean 的 SpEL 表达式myKeyResolver。

例子:这会将X-Request-Foo:Bar标头添加到所有匹配请求的下游请求标头中。
AddRequestHeader 知道用于匹配路径或主机的 URI 变量。URI 变量可以在值中使用,并将在运行时扩展。
spring:cloud:gateway:routes:- id: requestratelimiter_routeuri: https://example.orgfilters:- name: RequestRateLimiterargs:redis-rate-limiter.replenishRate: 10redis-rate-limiter.burstCapacity: 20

重定向到网关过滤器工厂

RedirectTo GatewayFilter Factory 采用status和url参数。状态应该是 300 系列重定向 http 代码,例如 301。 url 应该是有效的 url。这将是标头的值Location。

例子:这会将X-Request-Foo:Bar标头添加到所有匹配请求的下游请求标头中。
AddRequestHeader 知道用于匹配路径或主机的 URI 变量。URI 变量可以在值中使用,并将在运行时扩展。
spring:cloud:gateway:routes:- id: prefixpath_routeuri: https://example.orgfilters:- RedirectTo=302, https://acme.org

RemoveHopByHopHeadersFilter网关过滤器工厂

RemoveHopByHopHeadersFilter GatewayFilter Factory 从转发的请求中删除标头。删除的默认标头列表来自IETF。
默认删除的标头是:
联系
活着
代理认证
代理授权
TE
预告片
传输编码
升级
要更改此设置,请将该spring.cloud.gateway.filter.remove-non-proxy-headers.headers属性设置为要删除的标头名称列表。

例子:这会将X-Request-Foo:Bar标头添加到所有匹配请求的下游请求标头中。
AddRequestHeader 知道用于匹配路径或主机的 URI 变量。URI 变量可以在值中使用,并将在运行时扩展。
spring:cloud:gateway:routes:- id: removerequestheader_routeuri: https://example.orgfilters:- RemoveRequestHeader=X-Request-Foo

删除请求头网关过滤器工厂

RemoveRequestHeader GatewayFilter Factory 采用一个name参数。它是要删除的标头的名称。

例子:X-Request-Foo这将在向下游发送之前删除标头。
spring:cloud:gateway:routes:- id: removeresponseheader_routeuri: https://example.orgfilters:- RemoveResponseHeader=X-Response-Foo

删除响应头网关过滤器工厂

RemoveResponseHeader GatewayFilter Factory 采用一个name参数。它是要删除的标头的名称。

例子:X-Response-Foo这将在响应返回到网关客户端之前从响应中删除标头。要删除任何类型的敏感标头,您应该为您可能想要执行此操作的任何路由配置此过滤器。此外,您可以在使用后配置此过滤器spring.cloud.gateway.default-filters 并将其应用于所有路由。
spring:cloud:gateway:routes:- id: removeresponseheader_routeuri: https://example.orgfilters:- RemoveResponseHeader=X-Response-Foo

RewritePath 网关过滤器工厂

RewritePath GatewayFilter Factory 采用路径regexp参数和replacement参数。这使用 Java 正则表达式来灵活地重写请求路径。

例子:这会将X-Request-Foo:Bar标头添加到所有匹配请求的下游请求标头中。
AddRequestHeader 知道用于匹配路径或主机的 URI 变量。URI 变量可以在值中使用,并将在运行时扩展。
spring:cloud:gateway:routes:- id: rewriteresponseheader_routeuri: https://example.orgfilters:- RewriteResponseHeader=X-Response-Foo, , password=[^&]+, password=***

RewriteLocationResponseHeader 网关过滤器工厂

RewriteLocationResponseHeader GatewayFilter Factory 修改响应标头的值Location,通常是为了删除后端特定的详细信息。它需要stripVersionMode、locationHeaderName、hostValue和protocolsRegex参数。

例子:例如,对于请求,响应标头值将被重写为。POST https://api.example.com/some/object/nameLocationhttps://object-service.prod.example.net/v2/some/object/idhttps://api.example.com/some/object/id
参数stripVersionMode有以下可能值:NEVER_STRIP、AS_IN_REQUEST(默认)、ALWAYS_STRIP。
NEVER_STRIP- 版本不会被剥离,即使原始请求路径不包含版本
AS_IN_REQUEST- 仅当原始请求路径不包含版本时才会删除版本
ALWAYS_STRIP- 版本将被剥离,即使原始请求路径包含版本
参数hostValue(如果提供)将用于替换host:port响应Location标头的部分。Host如果未提供,则将使用请求标头的值。
参数protocolsRegex必须是有效的正则表达式String,协议名称将与其匹配。如果不匹配,过滤器将不执行任何操作。默认为http|https|ftp|ftps.
spring:cloud:gateway:routes:- id: rewriteresponseheader_routeuri: https://example.orgfilters:- RewriteResponseHeader=X-Response-Foo, , password=[^&]+, password=***

RewriteResponseHeader 网关过滤器工厂

RewriteResponseHeader GatewayFilter Factory 采用name、regexp和replacement参数。它使用 Java 正则表达式以灵活的方式重写响应标头值。

例子:对于标头值,它将在发出下游请求后/42?user=ford&password=omg!what&flag=true设置为。/42?user=ford&password=***&flag=true请使用$\表示$因为 YAML 规范。
spring:cloud:gateway:routes:- id: rewriteresponseheader_routeuri: https://example.orgfilters:- RewriteResponseHeader=X-Response-Foo, , password=[^&]+, password=***

保存会话网关过滤器工厂

SaveSession GatewayFilter Factory在将调用转发到下游之前WebSession::save强制执行操作。当使用带有惰性数据存储的Spring Session之类的东西时,这特别有用,并且需要确保在进行转发调用之前已保存会话状态。

例子:如果您正在将Spring Security与 Spring Session 集成,并且希望确保安全详细信息已转发到远程进程,那么这一点至关重要。
spring:cloud:gateway:routes:- id: save_sessionuri: https://example.orgpredicates:- Path=/foo/**filters:- SaveSession

自定义全局Filter

该GlobalFilter接口具有与 相同的签名GatewayFilter。这些是有条件地应用于所有路由的特殊过滤器。

组合的全局过滤器和网关过滤器排序

当请求传入(并与路由匹配)时,过滤 Web 处理程序会将所有实例GlobalFilter以及所有特定于路由的实例添加GatewayFilter到过滤器链中。这个组合的过滤器链是通过org.springframework.core.Ordered接口排序的,可以通过实现getOrder()方法来设置。
由于 Spring Cloud Gateway 区分过滤器逻辑执行的“前”和“后”阶段(请参阅:它是如何工作的),具有最高优先级的过滤器将是“前”阶段中的第一个和“后”阶段中的最后一个。 “-阶段。

@Bean
public GlobalFilter customFilter() {return CustomGlobalFilter();
}public class CustomGlobalFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("custom global filter");return chain.filter(exchange);}@Overridepublic int getOrder() {return -1;}
}

前向路由过滤器

在交换属性中查找ForwardRoutingFilterURI ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR。如果url有forwardscheme(即forward:///localendpoint),它将使用SpringDispatcherHandler来处理请求。请求 URL 的路径部分将被转发 URL 中的路径覆盖。未修改的原始 url 将附加到属性中的列表中ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR。

LoadBalancer客户端过滤器

在交换属性中查找LoadBalancerClientFilterURI ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR。如果 url 有一个lb方案(即lb://myservice),它将使用 Spring CloudLoadBalancerClient将名称(myservice在前面的示例中)解析为实际的主机和端口,并替换相同属性中的 URI。未修改的原始 url 将附加到属性中的列表中ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR。过滤器还将查看ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR属性以查看它是否相等lb,然后应用相同的规则。

spring:cloud:gateway:routes:- id: myRouteuri: lb://servicepredicates:- Path=/service/**

反应式负载均衡器客户端过滤器

在交换属性中查找ReactiveLoadBalancerClientFilterURI ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR。如果 url 有一个lb方案(即lb://myservice),它将使用 Spring CloudReactorLoadBalancer将名称(myservice在前面的示例中)解析为实际的主机和端口,并替换相同属性中的 URI。未修改的原始 url 将附加到属性中的列表中ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR。过滤器还将查看ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR属性以查看它是否相等 lb,然后应用相同的规则。

spring:cloud:gateway:routes:- id: myRouteuri: lb://servicepredicates:- Path=/service/**

Netty路由过滤器

如果交换属性中的 urlServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR具有httporhttps方案,则 Netty 路由过滤器将运行。它使用 NettyHttpClient发出下游代理请求。响应被放入ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR交换属性中以供稍后的过滤器使用。(有一个实验WebClientHttpRoutingFilter可以实现同样的功能,但是不需要netty)


Netty写响应过滤器

如果交换属性中NettyWriteResponseFilter有 Netty,则运行。它在所有其他过滤器完成后运行,并将代理响应写回网关客户端响应。(有一个实验可以实现同样的功能,但是不需要netty)HttpClientResponseServerWebExchangeUtils.CLIENT_RESPONSE_ATTRWebClientWriteResponseFilter


RouteToRequestUrl过滤器

如果交换属性中RouteToRequestUrlFilter有对象,则运行。它基于请求 URI 创建一个新的 URI,但使用对象的 URI 属性进行更新。新的 URI 被放置在交换属性中。RouteServerWebExchangeUtils.GATEWAY_ROUTE_ATTRRouteServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR
如果 URI 具有方案前缀,例如lb:ws://serviceid,则该lb方案将从 URI 中剥离并放置在 中,ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR以便稍后在过滤器链中使用。

Websocket路由过滤器

ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR如果交换属性中的 url具有ws或wss方案,则 Websocket 路由过滤器将运行。它使用 Spring Web Socket 基础设施向下游转发 Websocket 请求。

spring:cloud:gateway:routes:# SockJS route- id: websocket_sockjs_routeuri: http://localhost:3001predicates:- Path=/websocket/info/**# Normwal Websocket route- id: websocket_routeuri: ws://localhost:3001predicates:- Path=/websocket/**

网关指标过滤器

要启用 Gateway Metrics,请添加 spring-boot-starter-actuator 作为项目依赖项。然后,默认情况下,只要该属性spring.cloud.gateway.metrics.enabled未设置为 ,网关指标筛选器就会运行false。此过滤器添加一个名为“gateway.requests”的计时器指标,并带有以下标签:
routeId: 路线编号
routeUri:API 将路由到的 URI
outcome:按HttpStatus.Series分类的结果
status:请求返回给客户端的Http Status
httpStatusCode:请求返回给客户端的Http Status
httpMethod: 请求使用的Http方法
然后可以从中获取这些指标/actuator/metrics/gateway.requests,并可以轻松地与 Prometheus 集成以创建Grafana 仪表板。

将交换标记为已路由

网关路由后,ServerWebExchange它将通过添加gatewayAlreadyRouted 交换属性来将该交换标记为“已路由”。一旦请求被标记为已路由,其他路由过滤器将不会再次路由该请求,实质上会跳过该过滤器。您可以使用一些方便的方法将交换标记为已路由或检查交换是否已被路由。
ServerWebExchangeUtils.isAlreadyRouted获取一个ServerWebExchange对象并检查它是否已被“路由”
ServerWebExchangeUtils.setAlreadyRouted获取一个ServerWebExchange对象并将其标记为“已路由”

自定义局部Filter

Spring Cloud Gateway 提供了一种强大的机制,允许开发者自定义过滤器以满足特定的路由和请求处理需求。局部过滤器(GatewayFilter)是作用在特定路由上的过滤器,可以通过配置文件或代码方式实现绑定。

具体实现

实现GatewayFilter接口 要创建一个局部过滤器,首先需要实现org.springframework.cloud.gateway.filter.GatewayFilter接口,并重写其filter方法。

 import org.reactivestreams.Publisher;import org.springframework.cloud.gateway.filter.GatewayFilter;import org.springframework.cloud.gateway.filter.GatewayFilterChain;import org.springframework.core.Ordered;import org.springframework.web.server.ServerWebExchange;public class CustomGatewayFilter implements GatewayFilter, Ordered {private int order; // 用于指定过滤器执行顺序// 构造函数中可以设置order值public CustomGatewayFilter(int order) {this.order = order;}@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 在这里添加你的前置逻辑,比如修改请求头、参数等// ...return chain.filter(exchange).then(Mono.fromRunnable(() -> {// 在这里添加你的后置逻辑,如响应后处理}));}@Overridepublic int getOrder() {return this.order;}}

注册并应用到路由上 在Spring Boot应用中通过配置或者编程方式将自定义的局部过滤器应用到指定的路由上。
配置方式: 在application.yml或application.properties中进行配置

spring:cloud:gateway:routes:- id: my_routeuri: http://localhost:8081predicates:- Path=/my-service/**filters:- name: CustomGatewayFilter # 过滤器名称,可以根据Bean名称自动注入args:order: 1 # 如果过滤器实现了Ordered接口,可传递order值

通过实现RouteLocator接口或者使用RouteLocatorBuilder来自定义路由时加入过滤器

 import org.springframework.cloud.gateway.route.RouteLocator;import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class GatewayConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("custom_route", r -> r.path("/my-service/**").filters(f -> f.filter(new CustomGatewayFilter(1))).uri("http://localhost:8081")).build();}}

这样,当请求匹配到/my-service/**这个路径模式的路由时,将会触发我们自定义的CustomGatewayFilter进行处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/735766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于鹦鹉优化算法(Parrot optimizer,PO)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

《计算机网络》考研:2024/3/7 2.1.4 奈氏准则和香农定理

2024/3/7 (作者转行去干LLMs了&#xff0c;但是又想搞定考研&#xff0c;忙不过来了就全截图了呜呜呜。。。 生活真不容易。) 2.1.4 奈氏准则与香农定理

RocketMQ、Kafka、RabbitMQ 消费原理,顺序消费问题【图文理解】

B站视频地址 文章目录 一、开始二、结果1、RocketMQ 消费关系图1-1、queue和consumer的关系1-2、consumer 和线程的关系 2、Kafka 消费关系图1-1、partitions和consumer的关系1-2、consumer 和线程的关系 3、RabbitMQ 消费关系图1-1、queue和consumer的关系1-2、consumer 和线程…

基于美洲狮优化算法(Puma Optimizar Algorithm ,POA)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

【牛客】VL68 同步FIFO

描述 请设计带有空满信号的同步FIFO&#xff0c;FIFO的深度和宽度可配置。双口RAM的参考代码和接口信号已给出&#xff0c;请在答案中添加并例化此部分代码。 电路的接口如下图所示。端口说明如下表。 接口电路图如下&#xff1a; 双口RAM端口说明&#xff1a; 端口名I/O描述…

k8s中replication controller组件

背景 为了保证正常运行的pod的数量满足我们的要求&#xff0c;k8s中退出了replication controller的概念&#xff0c;这个组件的主要作用就是保证有指定数量的pod运行在集群中 replication controller组件 1.我们先看一下replication controller组件的配置文件定义 kind&am…

docker容器的数据卷

1配置数据卷 docker run --namen01 -d --restartalways -p 80:80 -v /qy172/data/nginx/html:/usr/share/nginx/html nginx 2Docker应用部署 1搜索mysql镜像 docker search mysql 2拉取mysql镜像 docker pull mysql:5.6 3创建容器&#xff0c; 设置端口映射、目录映射 d…

Go微服务:基于net/rpc模块实现微服务远程调用

基于RPC协议实现微服务 基于rpc实现跨语言调用&#xff0c;不限定服务提供方使用的语言在微服务架构中&#xff0c;每个微服务都被封装成了进程&#xff0c;相互独立在这里提供了客户端和服务端演示调用示例 1 &#xff09;服务端 新建 server/msg 目录&#xff0c;后执行 $…

GEE:基于ERA5数据集(U和V风速分量)计算风速的幅值和风向

作者:CSDN @ _养乐多_ 本文将介绍使用Google Earth Engine (GEE)平台提供的API加载ERA5月度数据集,该数据集包含了从1979年至今的全球月度气象数据。然后,定义了一个数据计算函数,用于将U和V风速分量转换为风速的幅值和风向。 结果如下图所示, 文章目录 一、核心函数1…

代码随想录day36:动态规划part4,背包问题

文章目录 day36&#xff1a;动态规划part4&#xff0c;背包问题01背包416.分割等和子集 day36&#xff1a;动态规划part4&#xff0c;背包问题 01背包 https://kamacoder.com/problempage.php?pid1046 二维数组版本&#xff1a; dp[i][j]里的i和j表达的是什么了&#xff0…

基于docker 配置hadoop-hive-spark-zeppelin环境进行大数据项目的开发

转载于&#xff1a; 基于docker的spark-hadoop分布式集群之一&#xff1a; 环境搭建 - Fordestiny - 博客园 (cnblogs.com) ---------------------------------------------------------- 如有侵权请私信&#xff0c;看到私信后会立即删除... ------------------------------…

计算机设计大赛 行人重识别(person reid) - 机器视觉 深度学习 opencv python

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习行人重识别(person reid)系统 该项目…

hive分区和分桶你熟悉吗?

两种用于优化查询性能的数据组织策略&#xff0c;数仓设计的关键概念&#xff0c;可提升Hive在读取大量数据时的性能。 1 分区&#xff08;Partitioning&#xff09; 根据表的某列的值来组织数据。每个分区对应一个特定值&#xff0c;并映射到HDFS的不同目录。 常用于经常查…

Keepalived工具的基本介绍(原理:VRRP协议)

目录 一、keepalived工作原理 1、VRRP 1.1 VRRP相关术语 1.2 VRRP相关技术 1.3 VRRP工作过程 2、keepalived介绍 2.1 Keepalived架构 3、keepalived的工作原理 3.1Keepalived高可用故障切换转移原理 4、脑裂 4.1什么是脑裂&#xff1f; 4.2造成脑裂的原因有哪些&am…

力扣--76. 最小覆盖子串

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如…

外边距折叠的原因和解决

参考文章 什么时候出现外边距塌陷 外边距塌陷&#xff0c;也叫外边距折叠&#xff0c;在普通文档流中&#xff0c;在垂直方向上的2个或多个相邻的块级元素&#xff08;父子或者兄弟&#xff09;外边距合并成一个外边距的现象&#xff0c;不过只有上下外边距才会有塌陷&#x…

podman checkpoint 性能优化

项目原因,需要使用checkpoint相关功能 团队一直比较熟悉 docker,于是开始对docker的checkpoint进行性能测试。 性能对比 docker环境 麒麟V10 SP3docker: 24criu:3.15进程: java进程, 内存约5GHDD命令 docker checkpoint create 容器ID checkpointName整个checkpoint 耗…

有什么针对新闻媒体行业的安全解决方案

对媒体行业而言&#xff0c;门户网站是最易受到攻击的地方。常见的攻击方式有网页篡改、挂马和被植入暗链等。门户网站作为新闻媒体对外的第一扇门&#xff0c;通常承载了大量的流量&#xff0c;一旦遭到攻击&#xff0c;造成的影响会更具有可怕的“传播力”。那么我们应该如何…

搭建一款实用的个人IT工具箱——it-tools

一、it-tools介绍 IT-Tools是一款开源的个人工具箱&#xff0c;专为IT从业人员打造&#xff0c;支持Docker私有化部署&#xff0c;包含众多实用的IT工具。其功能丰富多样&#xff0c;涵盖二维码生成、数据格式转换、MAC地址生成等&#xff0c;可满足用户多样化的需求。 二、本…

开源的python代码分析工具介绍

本文将为您详细讲解开源的 Python 代码分析工具&#xff0c;以及它们的特点、区别和应用场景。Python 社区提供了多种代码分析工具&#xff0c;这些工具可以帮助您在 Python 应用程序中进行代码质量评估、性能分析、安全检查等功能。 1. Pylint 特点 - 用于检查 Python…