我需要创建一个反向代理,接收传入的请求,并基于请求正文的内容,将请求路由到特定的URI。
这是一个路由微服务,它类似于反向代理,根据来自每个请求主体的一些信息进行路由。这意味着对于每个请求,我需要解析请求正文并获得“username”字段,然后建立JDBC连接以从数据库中获取附加信息。根据数据库中的信息,它最终将请求重定向到正确的URI。
从我现在所拥有的,我有2个阻止方法。第一个是请求主体的解析,另一个是到数据库的JDBC连接。我明白我不应该在网关过滤器内放置任何阻塞调用。我只是不知道在这种情况下我该怎么办。我可以让两个操作都运行异步,但最终我仍然需要数据库的信息来进行路由。
@Bean
public RouteLocator apiLocator(RouteLocatorBuilder builder, XmlMapper xmlMapper) {
return builder.routes()
.route(r -> r
.path("/test")
.and()
.readBody(String.class, s -> true) // Read the request body, data will be cached as cachedRequestBodyObject
.filters(f -> f.filter(new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
try {
// The following method is blocking and should not be put here
xmlMapper.readValue((String) exchange.getAttribute("cachedRequestBodyObject"), Map.class);
} catch (Exception e) {
//TODO
}
return chain.filter(exchange);
}
}))
.uri("http://localhost:8080"))
.build();
}
上面的示例只包括阻塞解析,因为我的请求体是基于XML的。我的IDE警告我那里有阻塞调用,我真的很感激。
非常感谢任何帮助。谢谢大家!
经过一些研究,Mono.FromCallable似乎很适合。然后我直接在github repo下问了同样的问题,结果发现使用servlet应用程序可能更好。对于任何有兴趣了解我的想法的人,请查看https://github.com/spring-cloud/spring-cloud-gateway/issues/1229
我正在尝试在最新版本的 Spring Cloud 流中使用基于内容的路由。根据这份文件 - 这是我用StreamListener编写的代码 通过使用该条件,可以将消息路由到两个不同的函数。 我正试图用如下的功能接口方法来消费消息。 如何在函数中实现类似的基于内容的路由?蒂亚。 其他细节- Spring引导版本 - 2.3.12.发布 Spring云版 - Hoxton.SR11
我们正在使用Spring Cloud Stream v2。2带有Kafka和Avro(本机编码器/解码器)。我们正在尝试根据负载的条件使用基于内容的路由。据我所知,根据Spring Cloud Stream文档,基于内容的路由只能在标头上实现,因为负载到达条件时没有经过类型转换过程。因此,除非条件基于字节格式,否则它将无法按预期工作。但是,我知道,当在本机模式下使用Avro时,会跳过消息头,并且不
我想在使用Spring Cloud Gateway时对uri的一部分进行消毒。 使用全局过滤器是正确的方法?或者是否有其他钩子可以用来拦截请求并修改URI?
在我的理解中,Spring Cloud Gateway必须实现一个HTTP客户端来发出反向代理请求。Spring框架提供了WebClient。我不知道Spring云网关是否真的在内部使用它。
我试图将使用工作的网关迁移到Spring Cloud网关,但遇到了请求路由问题。 下面是Spring Cloud Gateway配置的一个片段,我试图在其中配置一个等效的路由: 我使用Spring Cloud Eureka作为我的Discovery服务器(在一个单独的微服务中),并且我目前没有任何配置,如配置DiscoveryClient路由的谓词和过滤器中所述 如果我向发出请求,我将收到一个40
我在spring cloud gateway中实现了自定义预过滤器,它允许经过身份验证的请求通过下游流程。我想要的是,如果请求是未经身份验证的,然后返回401未授权状态的响应,并停止下游处理。我可以实现这个Spring云网关。 请帮忙。 和配置如下: