gpt4 book ai didi

java - 如何在 zuul/ribbon 中获取请求将转发到的服务器的主机名

转载 作者:行者123 更新时间:2023-11-30 02:09:31 24 4
gpt4 key购买 nike

我目前分别使用 Zuul 和 Ribbon 作为反向代理和负载均衡器。我还使用 Eureka 作为服务发现。我在 Eureka 中有多个服务实例,我想知道 Ribbon 选择的服务器的主机名。

这是我当前的配置:

GatewayApplication.java:

@EnableZuulProxy
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayApplication {
static RequestQueue q = new RequestQueue();

public static void main(String[] args) {
q.start();
SpringApplication.run(GatewayApplication.class, args);
}

@Bean
public LogIncomingRequest logIncomingRequest() {
return new LogIncomingRequest(q);
}

@Bean
public LogLeavingRequest logLeavingRequest() {
return new LogLeavingRequest(q);
}
}

application.yml:

server:
port: 4000

spring:
application:
name: zuul-gateway

zuul:
sensitive-headers:

eureka:
client:
serviceUrl:
defaultZone: http://${EUREKA:10.0.2.15:8761}/eureka/
register-with-eureka: true
fetch-registry: true
instance:
prefer-ip-address: true

hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 60000

我还有一个前置过滤器和一个后置过滤器。如何获取功能区选择的服务器的信息?

我找到了这段代码,但我不知道在哪里使用它以及如何访问信息。

@Component
public class RibbonInterceptor extends ZoneAvoidanceRule {

@Override
public Server choose(Object key) {
Server choose = super.choose(key);
System.out.println(choose);
return choose;
}

还有其他解决办法吗?

提前致谢!

最佳答案

在你的zuul api网关中实现一个“pre”过滤器,如果你看一下zuul的PreDecorationFilter,你会发现它根据提供的内容确定路由的位置和方式。还为下游请求设置各种与代理相关的 header

在你的过滤器运行方法中

context = RequestContext.getCurrentContext();    
request = context.getRequest();

在上下文对象上调用 getRouteHost 方法,它将为您提供所有与路由相关的信息,如协议(protocol)、主机、端口等。

RequestContext.getCurrentContext().getRouteHost();

注意:过滤器的阶数应 > 5,因为 preDecorationFilter 的阶数为 5

@Override
public int filterOrder() {
return PRE_DECORATION_FILTER_ORDER;
}

关于java - 如何在 zuul/ribbon 中获取请求将转发到的服务器的主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50513050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com