我使用Eureka进行服务发现,使用Zuul +功能区作为反向代理和负载均衡器。 我在Eureka注册了2个实例,如下所示:
MYSERVICE n/a (2) (2) UP (2) - MYHOST:MyService:8888 , MYHOST:MyService:9999
以下是我的zuul配置:
@EnableZuulProxy
@EnableDiscoveryClient
zuul:
debug.request: true
sensitiveHeaders:
routes:
ecm:
path: /myservice/**
serviceId: MYSERVICE
stripPrefix: false
host:
maxTotalConnections: 200
maxPerRouteConnections: 30
RibbonRoutingFilter:
route.disable: false
我想要一个过滤器或拦截器,它可以帮助我记录我的请求URL,我的请求参数和Zuul选择的服务器。
我尝试扩展以下内容:
@Component
public class RibbonInterceptor extends ZoneAvoidanceRule {
@Override
public Server choose(Object key) {
Server choose = super.choose(key);
System.out.println(choose);
return choose;
}
但是,这只是给了我Ribbon的服务器信息,这里的功能区就是选择服务器。我想从Zuul获取此信息以及请求详细信息。
请帮助!!
答案 0 :(得分:0)
对于请求URL和Zuul选择的服务器,您可以在application.properties中将LoadBalancerContext
的日志级别设置为DEBUG
。
#logging load balancing information
logging.level.com.netflix.loadbalancer.LoadBalancerContext=DEBUG
这将创建一个日志语句,如:
2017-09-11T12:59:09.746-07:00: [DEBUG] hystrix-myserviceV3-2 com.netflix.loadbalancer.LoadBalancerContext - myserviceV3 using LB returned Server: myservice-2.abc.com:8080 for request http:///myservice/auth/users
不确定,如何处理请求参数。
答案 1 :(得分:0)
假设您使用Apache HttpClient,有很多方法可以做到这一点,但我认为最简单的方法是将HttpRequestInterceptor
添加到Ribbon使用的CloseableHttpClient
。您可以通过提供文档[1]中提到的CloseableHttpClient
类型的bean来自定义客户端。然后,您将获得HttpClient实际使用的请求,以便您记录详细信息。
@Bean
public HttpClient delegate(IClientConfig clientConfig)
{
HttpClientBuilder builder = HttpClientBuilder.create();
//set connection pool configuration
HttpRequestInterceptor interceptor = (request, context) -> logger.info("Server : {}, headers : {}", request.getRequestLine().getUri(), request.getAllHeaders());
builder.addInterceptorFirst(interceptor);
return builder.build();
}
您还可以扩展HttpClientRibbonCommand
并覆盖run()
方法以打印您想要的内容。您可以通过提供RibbonCommandFactory<YourExtendedRibbonCommand>
类型的bean来使用新类,它应自动连接到RibbonRoutingFilter
。
最后,如果你在hystrix中使用信号量隔离策略,除了RibbonInterceptor
之外,你可以像你一样使用你的com.netflix.zuul.context.RequestContext
。在RequestContext
中,您会找到原始HttpServletRequest
以及pre
过滤器中处理过的已解析参数和标题。
[1] https://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#_zuul_http_client