123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- package camel.central.gateway.route;
- import camel.central.gateway.processor.ErrorHandle;
- import camel.central.gateway.processor.GatewayProcessor;
- import camel.central.gateway.processor.SignProcessor;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.node.ObjectNode;
- import org.apache.camel.Exchange;
- import org.apache.camel.Message;
- import org.apache.camel.builder.RouteBuilder;
- import org.springframework.stereotype.Component;
- import javax.servlet.http.HttpServletResponse;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- /**
- * @author HZY
- * @vsrsion 1.0
- * Created at 2017/3/13.
- */
- @Component
- public class GatewayRouterBuilder extends RouteBuilder {
- private ExecutorService threadPool;
- @Override
- public void configure() throws Exception {
- threadPool = Executors.newCachedThreadPool();
- // getContext().setTracing(true);
- getContext().setStreamCaching(true);
- enableSSL();
- apiRoute();
- errorHandleRoute();
- logRoute();
- toolRoute();
- }
- private void enableSSL() {
- // if (httpsEnable) {
- // //全局ssl设置
- // KeyStoreParameters ksparams = new KeyStoreParameters();
- // ksparams.setResource("tomcat.keystore");
- // ksparams.setPassword("123456");
- //
- // KeyManagersParameters kmp = new KeyManagersParameters();
- // kmp.setKeyStore(ksparams);
- // kmp.setKeyPassword("123456");
- //
- // SSLContextParameters scp = new SSLContextParameters();
- // scp.setKeyManagers(kmp);
- //
- // JettyHttpComponent jettyComponent = getContext().getComponent("jetty", JettyHttpComponent.class);
- // jettyComponent.setSslContextParameters(scp);
- // }
- }
- private void apiRoute() {
- //EHR 解析服务代理
- from("jetty:http://0.0.0.0:9999/resolve?matchOnUriPrefix=true").routeId("resolveProxy")
- // .to("jetty:http://172.19.103.74:10170?bridgeEndpoint=true&throwExceptionOnFailure=false");
- .to("jetty:http://192.168.200.83:10170?bridgeEndpoint=true&throwExceptionOnFailure=false");
- //EHR ag-admin网关代理
- from("jetty:http://0.0.0.0:9998?matchOnUriPrefix=true").routeId("proxy")
- // .to("jetty:http://172.19.103.73:10000?bridgeEndpoint=true&throwExceptionOnFailure=false");
- .to("jetty:http://192.168.220.84:10000?bridgeEndpoint=true&throwExceptionOnFailure=false");
- //EHR 公钥获取
- from("jetty:http://0.0.0.0:9999/api/v1.0/organizations/{org_code}/key").routeId("publicKey")
- // .to("jetty:http://172.19.103.73:10400?bridgeEndpoint=true&throwExceptionOnFailure=false");
- .to("jetty:http://192.168.220.85:10000?bridgeEndpoint=true&throwExceptionOnFailure=false");
- // 非病人维度 档案上传接口代理
- from("jetty:http://0.0.0.0:9999/api/dataset/packages?bridgeEndpoint=true&enableMultipartFilter=false").routeId("proxyUploadPack")
- .removeHeaders("CamelHttp*")
- // .to("jetty:http://172.19.103.74:10140/api/v1.0/packages");
- .to("jetty:http://192.168.200.69:10140/api/v1.0/datasetPackages");
- // 档案上传接口代理
- from("jetty:http://0.0.0.0:9999/api/packages?bridgeEndpoint=true&enableMultipartFilter=false").routeId("proxyUploadPackage")
- .removeHeaders("CamelHttp*")
- // .to("jetty:http://172.19.103.74:10140/api/v1.0/packages");
- .to("jetty:http://192.168.220.233/packmgr/api/v1.0/packages");
- // 质控包上传接口代理
- from("jetty:http://0.0.0.0:9999/api/qcPackages?bridgeEndpoint=true&enableMultipartFilter=false").routeId("proxyQcPackUpload")
- .removeHeaders("CamelHttp*")
- // .to("jetty:http://172.19.103.73:10300/api/v1.0/report/receiveReportFile");
- .to("jetty:http://192.168.40.120:10300/api/v1.0/report/receiveReportFile");
- //统一网关入口(restful)
- from("jetty:http://0.0.0.0:9999/api").routeId("api")
- .wireTap("direct:gatewayLog").executorService(threadPool)
- .bean(method(GatewayProcessor.class, "route"))
- .wireTap("direct:gatewayLog").executorService(threadPool);
- }
- /**
- * 统一网关错误代码返回
- */
- private void errorHandleRoute() {
- from("direct:errorHandle").routeId("errorHandle")
- .choice()
- .when(header(Exchange.HTTP_URI).contains("paramError")).bean(new ErrorHandle(), "paramError")
- .when(header(Exchange.HTTP_URI).contains("outdateError")).bean(new ErrorHandle(), "outdateError")
- .when(header(Exchange.HTTP_URI).contains("signValidError")).bean(new ErrorHandle(), "signValidError")
- .when(header(Exchange.HTTP_URI).contains("unauthorizedError")).bean(new ErrorHandle(), "unauthorizedError")
- .endChoice();
- }
- private void toolRoute() {
- //流程健康测试接口
- from("jetty:http://0.0.0.0:9999/healthy").routeId("healthy")
- .log("=========================心跳测试=====================");
- //网关辅助工具路由,用于生成签名等内容。不要要发布到生产环境中。
- from("jetty:http://0.0.0.0:9999/sign").routeId("sign")
- .process(new SignProcessor());
- }
- private void logRoute() {
- from("direct:gatewayLog").aggregate(header("breadcrumbId"), (oldExchange, newExchange) -> {
- if (oldExchange == null) {
- Date date = new Date();
- newExchange.getIn().setHeader("time", date);
- return newExchange;
- } else {
- Date end = new Date();
- Date begin = oldExchange.getIn().getHeader("time", Date.class);
- long responseTime = end.getTime() - begin.getTime();
- oldExchange.getIn().setHeader("responseTime", responseTime);
- String body = newExchange.getIn().getBody(String.class);
- oldExchange.getIn().setBody(body);
- return oldExchange;
- }
- }).process(exchange -> {
- Message in = exchange.getIn();
- String api = in.getHeader("api", String.class);
- String appKey = in.getHeader("appKey", String.class);
- String sign = in.getHeader("sign", String.class);
- String timestamp = in.getHeader("timestamp", String.class);
- String v = in.getHeader("v", String.class);
- String param = in.getHeader("param", String.class);
- String token = in.getHeader("token", String.class);
- Date time = in.getHeader("time", Date.class);
- String requestTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time);
- Long responseTime = in.getHeader("responseTime", Long.class);
- String url = in.getHeader("CamelHttpUrl", String.class);
- String method = in.getHeader("CamelHttpMethod", String.class);
- HttpServletResponse response = in.getHeader("CamelHttpServletResponse", HttpServletResponse.class);
- in.getHeader("CamelHttpServletResponse", HttpServletResponse.class);
- String body = in.getBody(String.class);
- ObjectMapper objectMapper = new ObjectMapper();
- ObjectNode objectNode = objectMapper.createObjectNode();
- objectNode.put("time", requestTime);
- objectNode.put("logType", 1);
- objectNode.put("caller", appKey);
- ObjectNode dataNode = objectMapper.createObjectNode();
- dataNode.put("responseTime", responseTime);
- dataNode.put("url", url);
- dataNode.put("responseCode", response.getStatus());
- dataNode.put("response", body);
- dataNode.put("api", api);
- dataNode.put("appKey", appKey);
- dataNode.put("method", method);
- ObjectNode paramNode = objectMapper.createObjectNode();
- paramNode.put("api", api);
- paramNode.put("appKey", appKey);
- paramNode.put("sign", sign);
- paramNode.put("timestamp", timestamp);
- paramNode.put("v", v);
- if (param != null) {
- paramNode.put("param", param);
- }
- if (token != null) {
- paramNode.put("token", token);
- }
- dataNode.set("params", paramNode);
- objectNode.set("data", dataNode);
- String content = objectMapper.writeValueAsString(objectNode);
- exchange.getOut().setBody(content);
- }).completionSize(2).to("file://e:/gatewayLog");
- }
- }
|