在上一节中, 我们讨论了在API Gateway中实现的常见功能。我们已经准备好充当API网关的Zuul服务器。
在本节中, 我们将在Zuul API网关中实现日志记录功能。
让我们在Zuul API网关中实现日志记录。
步骤1:在netflix-zuul-api-gateway-server项目中, 创建一个名称为Zu??ulLoggingFilter的新类文件。
步骤2:添加注释@Componenet。
步骤3:扩展ZuulFilter类。 ZuulFilter类中有一些抽象方法。这些抽象方法必须在ZuulLoggingFilter类中实现。
步骤4:将光标移到ZuulLoggingFilter类上。它提出了两个快速修复方法, 如下图所示。单击添加未实现的方法。我们获得ZuulFilter类的所有抽象方法的默认实现。
文章图片
ZuulFilter类具有以下列出的四个抽象方法:
- shouldFilter():shouldFilter()方法检查请求并决定是否执行过滤器。
- run():如果!isFilterDisabled()和shouldFilter()方法都返回true, 则调用run()方法。
- filterType():filterType()方法按类型对过滤器进行分类。 Zuul中有四种类型的标准过滤器:用于路由选择前过滤的pre, 用于路由到源的路由, 用于路由选择后过滤器的post和用于错误处理的错误。 Zuul还支持用于静态响应的静态类型。可以通过调用方法runFilters(type)来创建或添加和运行任何过滤器类型。
- filterOrder():必须为过滤器定义过滤器顺序。如果优先级对于过滤器不重要, 则过滤器可能具有相同的过滤器顺序。过滤器顺序不必是连续的。
private Logger logger=LoggerFactory.getLogger(this.getClass());
切记:导入org.slf4j软件包的Logger类。
步骤6:在run()方法中实现逻辑。
public Object run() throws ZuulException{//getting the current HTTP request that is to be handleHttpServletRequest request=RequestContext.getCurrentContext().getRequest();
//printing the detail of the requestlogger.info("request ->
{} request uri->
{}", request, request.getRequestURI());
return null;
}
ZuulLoggingFilter.java
package com.srcmini.microservices.netflixzuulapigatewayserver;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
@Componentpublic class ZuulLoggingFilter extends ZuulFilter{//creating Logger objectprivate Logger logger=LoggerFactory.getLogger(this.getClass());
@Overridepublic booleanshouldFilter() {return true;
//executing filter for every request}//log the content of the request@Overridepublic Object run() throws ZuulException{//getting the current HTTP request that is to be handleHttpServletRequest request=RequestContext.getCurrentContext().getRequest();
//prints the detail of the requestin the loglogger.info("request ->
{} request uri->
{}", request, request.getRequestURI());
return null;
}@Overridepublic String filterType() {return "pre";
//intercept all the request before execution}@Overridepublic intfilterOrder() {return 1;
//setting filter order to 1}}
在下一步中, 我们将看到如何使用Zuul拦截请求。
点击这里下载货币兑换服务
点击这里下载货币兑换服务
点击这里下载netflix-eureka-naming-server
【Spring Cloud实现Zuul日志过滤器】点击这里下载netflix-zuul-api-gateway-server
推荐阅读
- Spring Cloud API网关简介
- Url Scheme实现APP间通信分享
- Android 冷兵器 之 tools
- Reading SBAR SDN flow-Based monitoring and Application Recognition
- android ndk cmake Invalid Android ABI
- Android第二课 开发联机调试
- Android第一课 资源帮助
- Android第三课 联调华为手机
- Android第四课 adb常用指令