Optimize RouteFilter.java

This commit is contained in:
hongqiaowei
2021-10-29 17:13:30 +08:00
parent 24e549dc57
commit 087bd0f41c

View File

@@ -23,7 +23,6 @@ import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponse;
@@ -62,13 +61,13 @@ public class RouteFilter extends FizzWebFilter {
private static final Logger log = LoggerFactory.getLogger(RouteFilter.class); private static final Logger log = LoggerFactory.getLogger(RouteFilter.class);
@Resource @Resource
private FizzWebClient fizzWebClient; private FizzWebClient fizzWebClient;
@Resource @Resource
private ApacheDubboGenericService dubboGenericService; private ApacheDubboGenericService dubboGenericService;
@Resource @Resource
private SystemConfig systemConfig; private SystemConfig systemConfig;
@Override @Override
public Mono<Void> doFilter(ServerWebExchange exchange, WebFilterChain chain) { public Mono<Void> doFilter(ServerWebExchange exchange, WebFilterChain chain) {
@@ -111,31 +110,23 @@ public class RouteFilter extends FizzWebFilter {
if (route == null) { if (route == null) {
String pathQuery = WebUtils.getClientReqPathQuery(exchange); String pathQuery = WebUtils.getClientReqPathQuery(exchange);
return send(exchange, req.getMethod(), WebUtils.getClientService(exchange), pathQuery, hdrs, route); return fizzWebClient.send2service(traceId, req.getMethod(), WebUtils.getClientService(exchange), pathQuery, hdrs, req.getBody(), 0, 0, 0)
.flatMap(genServerResponse(exchange));
} else if (route.type == ApiConfig.Type.SERVICE_DISCOVERY) { } else if (route.type == ApiConfig.Type.SERVICE_DISCOVERY) {
String pathQuery = getBackendPathQuery(req, route); String pathQuery = getBackendPathQuery(req, route);
return send(exchange, route.method, route.backendService, pathQuery, hdrs, route); return fizzWebClient.send2service(traceId, route.method, route.backendService, pathQuery, hdrs, req.getBody(), route.timeout, route.retryCount, route.retryInterval)
.flatMap(genServerResponse(exchange));
} else if (route.type == ApiConfig.Type.REVERSE_PROXY) { } else if (route.type == ApiConfig.Type.REVERSE_PROXY) {
String uri = ThreadContext.getStringBuilder().append(route.nextHttpHostPort) String uri = ThreadContext.getStringBuilder().append(route.nextHttpHostPort)
.append(getBackendPathQuery(req, route)) .append(getBackendPathQuery(req, route))
.toString(); .toString();
return fizzWebClient.send(traceId, route.method, uri, hdrs, req.getBody(), route.timeout, route.retryCount, route.retryInterval).flatMap(genServerResponse(exchange)); return fizzWebClient.send(traceId, route.method, uri, hdrs, req.getBody(), route.timeout, route.retryCount, route.retryInterval)
.flatMap(genServerResponse(exchange));
} else if (route.type == ApiConfig.Type.DUBBO) {
return dubboRpc(exchange, route);
} else { } else {
String msg = "cant handle api config type " + route.type; return dubboRpc(exchange, route);
StringBuilder b = ThreadContext.getStringBuilder();
WebUtils.request2stringBuilder(exchange, b);
log.error(b.append(Consts.S.LF).append(msg).toString(), LogService.BIZ_ID, traceId);
HttpStatus s = HttpStatus.INTERNAL_SERVER_ERROR;
if (!SystemConfig.FIZZ_ERR_RESP_HTTP_STATUS_ENABLE) {
s = HttpStatus.OK;
}
return WebUtils.buildJsonDirectResponseAndBindContext(exchange, s, null, WebUtils.jsonRespBody(s.value(), msg, traceId));
} }
} }
@@ -153,16 +144,6 @@ public class RouteFilter extends FizzWebFilter {
} }
} }
private Mono<Void> send(ServerWebExchange exchange, HttpMethod method, String service, String relativeUri, HttpHeaders hdrs, Route r) {
ServerHttpRequest clientReq = exchange.getRequest();
if (r == null) {
return fizzWebClient.send2service(WebUtils.getTraceId(exchange), method, service, relativeUri, hdrs, clientReq.getBody())
.flatMap(genServerResponse(exchange));
}
return fizzWebClient.send2service(WebUtils.getTraceId(exchange), method, service, relativeUri, hdrs, clientReq.getBody(), r.timeout, r.retryCount, r.retryInterval)
.flatMap(genServerResponse(exchange));
}
private Function<ClientResponse, Mono<? extends Void>> genServerResponse(ServerWebExchange exchange) { private Function<ClientResponse, Mono<? extends Void>> genServerResponse(ServerWebExchange exchange) {
return remoteResp -> { return remoteResp -> {
ServerHttpResponse clientResp = exchange.getResponse(); ServerHttpResponse clientResp = exchange.getResponse();