【问题标题】:Zuul proxy with ribbon + listOfServers and logging requirement具有功能区 + listOfServers 和日志记录要求的 Zuul 代理
【发布时间】:2016-05-02 11:38:19
【问题描述】:
您好,我已将 Zuul (spring-cloud-netflix) 配置为使用功能区。
在向 zuul 添加功能区之前,我能够在日志中查看哪些请求正在发送到 zuul,以及哪些请求正在发送到相关端点。
在某些时候,我添加了功能区和负载平衡功能。
现在我在日志中看不到传出请求(从 zuul 到真实端点)请求。一切正常。没有错误。但我需要在 Zuul 代理中了解/记录incomingReq->outgoingReq 信息。我的意思是我需要路由路径信息(尤其是 ip 信息)。
有没有办法查看/获取这些信息?如果可能,我想将其记录在过滤器中?
【问题讨论】:
标签:
spring-cloud
netflix-zuul
spring-cloud-netflix
【解决方案1】:
我找到了一种方法来做类似的事情..
希望它也对其他人有所帮助。
import com.netflix.client.IResponse;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.net.URI;
@Component
public class PostFilter extends ZuulFilter {
Logger auditLogger = LoggerFactory.getLogger("auditLogger");
@Override
public String filterType() {
return "post";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
URI ribbonResponseURI = ((IResponse) ctx.get("ribbonResponse")).getRequestedURI();
AuditBean auditBean = (AuditBean) RequestContext.getCurrentContext().get("auditBean");
auditBean.setIncomingURI(ctx.getRequest().getRequestURL().toString());
auditBean.setOutgoingURI(ribbonResponseURI.toString());
auditLogger.info("{}", auditBean.toJson());
return null;
}
}