zuul 直接配置url,ip端口,测试异常场景
直接配置url: http://127.0.0.1:9001,不走hystrix,ribbon
zuul:
host:
socket-timeout-millis: 3000
connect-timeout-millis: 3000
prefix: /test
routes:
search:
path: /admin/**
url: http://127.0.0.1:9001
stripPrefix: true
测试场景:
后端服务端口不通(127.0.0.1:9001不通) 进入error过滤器
http://localhost:8765/test/search/sku/list2
链接超时(127.0.0.1:9001超时) 进入error过滤器
http://localhost:8765/test/search/sku/list2
url routes 不匹配 404 不进入per过滤器
http://localhost:8765/test/search2/sku/list2
url prefix 不匹配 404 不进入per过滤器
http://localhost:8765/test2/search/sku/list2
url routes 匹配404 进入per过滤器,不到error过滤器
http://localhost:8765/test/search2/sku/list2
@Component
public class ErrorFilter extends ZuulFilter {
private static Logger log = LoggerFactory.getLogger(ErrorFilter.class);
@Override
public String filterType() {
//异常过滤器
return "error";
}
@Override
public int filterOrder() {
//优先级,数字越大,优先级越低
return 0;
}
@Override
public boolean shouldFilter() {
//是否执行该过滤器,true代表需要过滤
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
log.info("进入异常过滤器");
System.out.println(ctx.getResponseBody());
ctx.setResponseBody("出现异常");
String s = ExceptionUtils.getStackTrace( ctx.getThrowable());
log.error("`````````````````````````````````````````````````````````````"+s);
log.error("`````````````````````````````````````````````````````````````");
return null;
}
/**
* Route {@link ZuulFilter} that sends requests to predetermined URLs via apache {@link HttpClient}.
* URLs are found in {@link RequestContext#getRouteHost()}.
*
* @author Spencer Gibb
* @author Dave Syer
* @author Bilal Alp
*/
public class SimpleHostRoutingFilter extends ZuulFilter {
private static final Log log = LogFactory.getLog(SimpleHostRoutingFilter.class);
private static final DynamicIntProperty SOCKET_TIMEOUT = DynamicPropertyFactory
.getInstance()
.getIntProperty(ZuulConstants.ZUUL_HOST_SOCKET_TIMEOUT_MILLIS, 10000);
private static final DynamicIntProperty CONNECTION_TIMEOUT = DynamicPropertyFactory
.getInstance()
.getIntProperty(ZuulConstants.ZUUL_HOST_CONNECT_TIMEOUT_MILLIS, 2000);
private final Timer connectionManagerTimer = new Timer(
"SimpleHostRoutingFilter.connectionManagerTimer", true);
private boolean sslHostnameValidationEnabled;
private boolean forceOriginalQueryStringEncoding;
private ProxyRequestHelper helper;
private Host hostProperties;
private PoolingHttpClientConnectionManager connectionManager;
private CloseableHttpClient httpClient;