浏览代码

Merge branch 'master' of http://192.168.1.220:10080/CoSharp/eip

airhead 7 年之前
父节点
当前提交
774271c8aa

+ 1 - 1
hos-broker/src/main/resources/logback-spring.xml

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<configuration debug="true">
    <!--<property name="log_dir" value="logs/"/>-->
    <!--&lt;!&ndash;日志文件的保存路径,首先查找系统属性-Dlog.dir,如果存在就使用其;否则,在当前目录下创建名为logs目录做日志存放的目录 &ndash;&gt;-->
    <!--<property name="LOG_HOME" value="${log_dir:-logs}"/>-->

+ 30 - 0
hos-camel2/src/main/java/camel/central/archives/processor/ArchivesService.java

@ -0,0 +1,30 @@
package camel.central.archives.processor;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import org.springframework.stereotype.Service;
/**
 * Broker原则上具有等同性,这样Arbiter无论选择了哪个Broker能提供的服务都是一样的。
 * 但是因为Broker上还是会运行一些定时的采集任务,这些采集任务如果是多台Broker运行的话,可能会引起数据重复问题。
 * 所以在事件触发时需要做一些策略的调整:
 * 1.实时任务,通知所有的Broker进行更新路由
 * 2.采集任务,只通知其中的一台进行更新路由
 *
 * @created Airhead 2016/8/16.
 */
@Service("archivesService")
public class ArchivesService {
    private static final Logger logger = LoggerFactory.getLogger(ArchivesService.class);
    //入库服务调用(病人维度)
    public void storageArchive(String msg) {
        System.out.println(msg);
    }
    //入库服务调用(非病人维度/数据集维度)
    public void storageDataset(String msg) {
        System.out.println(msg);
    }
}

+ 36 - 0
hos-camel2/src/main/java/camel/central/archives/route/ArchivesMqRouter.java

@ -0,0 +1,36 @@
package camel.central.archives.route;
import com.yihu.hos.web.framework.constant.ArchivesConstant;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.model.ModelCamelContext;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.jms.ConnectionFactory;
/**
 * @created Airhead 2016/8/1.
 */
@Component
public class ArchivesMqRouter extends RouteBuilder {
    @Value("${spring.activemq.broker-url}")
    private String brokerURL;
    @Value("${spring.activemq.user}")
    private String user;
    @Value("${spring.activemq.password}")
    private String password;
    @Override
    public void configure() throws Exception {
        ModelCamelContext context = this.getContext();
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                user, password, brokerURL);
        // Note we can explicit name the component
        context.addComponent(ArchivesConstant.CAMEL_COMPONENT, JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
        from(ArchivesConstant.CAMEL_ENDPOINT)
        .to("bean:archivesService?method=storageArchive");
    }
}

+ 38 - 0
hos-camel2/src/main/java/camel/central/archives/route/ArchivesRouterBuilder.java

@ -0,0 +1,38 @@
package camel.central.archives.route;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/3/13.
 */
@Component
public class ArchivesRouterBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        // 档案上传接口代理 (兼容非病人维度上传)
        from("jetty:http://0.0.0.0:9912/api/dataset_package?bridgeEndpoint=true&enableMultipartFilter=false").routeId("proxy_test")
                .removeHeaders("CamelHttp*")
                .to("jetty:http://192.168.1.221:10140/api/v1.0/dataset_package");
        //上传流程总线
        from("jetty:http://0.0.0.0:9911/uploadArchive").routeId("uploadArchive")
                .log("=========================心跳测试=====================");
        //流程健康测试接口
        from("jetty:http://0.0.0.0:9911/healthy").routeId("healthy_test")
                .log("=========================心跳测试=====================");
    }
}

+ 39 - 0
hos-camel2/src/main/java/camel/central/gateway/processor/ErrorHandle.java

@ -0,0 +1,39 @@
package camel.central.gateway.processor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.Exchange;
import org.springframework.stereotype.Component;
/**
 * @author Airhead
 * @since 2017/3/17.
 */
@Component("errorHandle")
public class ErrorHandle {
    private ObjectMapper objectMapper =new ObjectMapper();
    public void paramError(Exchange exchange) {
        exchange.getOut().setHeader("errorCode","{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"paramError!\",\"errorCode\":0}");
        exchange.getOut().setBody("{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"paramError!\",\"errorCode\":0}");
    }
    public void outdateError(Exchange exchange) {
        exchange.getOut().setHeader("errorCode","{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"outdateError!\",\"errorCode\":0}");
        exchange.getOut().setBody("{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"outdateError!\",\"errorCode\":0}");
    }
    public void signValidError(Exchange exchange) {
        exchange.getOut().setHeader("errorCode","{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"signValidError!\",\"errorCode\":0}");
        exchange.getOut().setBody("{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"signValidError!\",\"errorCode\":0}");
    }
    public void unauthorizedError(Exchange exchange) {
        exchange.getOut().setHeader("errorCode","{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"unauthorizedError!\",\"errorCode\":0}");
        exchange.getOut().setBody("{\"successFlg\":false,\"pageSize\":10,\"currPage\":0,\"totalPage\":0,\"totalCount\":0,\"detailModelList\":null,\"obj\":null,\"errorMsg\":\"unauthorizedError!\",\"errorCode\":0}");
    }
}

+ 12 - 6
hos-camel2/src/main/java/camel/central/gateway/processor/GatewayProcessor.java

@ -48,36 +48,42 @@ public class GatewayProcessor implements Processor {
//        body = URLDecoder.decode(body, "UTF-8");
        Map<String, Object> params = exchange.getIn().getHeaders();
        if (params.get("appKey") == null) {
            return "restlet:http://0.0.0.0:8088/error/paramError?socketTimeout=60000&connectionTimeout=60000";    //TODO:
            exchange.getOut().setHeader(Exchange.HTTP_URI,"paramError");
            return "direct:errorHandle";    //TODO:
        }
        String appKey = params.get("appKey").toString();
        String secret = getSecret(appKey);
        if (secret.equals("")) {
            return "restlet:http://0.0.0.0:8088/error/paramError?socketTimeout=60000&connectionTimeout=60000";    //TODO:
            exchange.getOut().setHeader(Exchange.HTTP_URI,"paramError");
            return "direct:errorHandle";    //TODO:
        }
        boolean pass = checkParams(params);
        if (!pass) {
            return "jetty:http://0.0.0.0:8088/error/paramError?socketTimeout=60000&connectionTimeout=60000";    //TODO:
            exchange.getOut().setHeader(Exchange.HTTP_URI,"paramError");
            return "direct:errorHandle";    //TODO:
        }
        pass = checkTimeStamp(params);
        if (!pass) {
            return "restlet:http://0.0.0.0:8088/error/outdataError?socketTimeout=60000&connectionTimeout=60000";    //TODO:
            exchange.getOut().setHeader(Exchange.HTTP_URI,"outdateError");
            return "direct:errorHandle";    //TODO:
        }
        //获取secret接口,不做sign验证
        if (!"admin.apps.get".equals(params.get("api"))) {
            pass = checkSign(params, secret);
            if (!pass) {
                return "restlet:http://0.0.0.0:8088/error/signValidError?socketTimeout=60000&connectionTimeout=60000";    //TODO:
                exchange.getOut().setHeader(Exchange.HTTP_URI,"signValidError");
                return "direct:errorHandle";    //TODO:
            }
        }
        pass = checkAuthorized(params);
        if (!pass) {
            return "restlet:http://0.0.0.0:8088/error/unauthorizedError";    //TODO:
            exchange.getOut().setHeader(Exchange.HTTP_URI,"unauthorizedError");
            return "direct:errorHandle";    //TODO:
        }
        return genEndpoint(params, exchange);

+ 27 - 0
hos-camel2/src/main/java/camel/central/gateway/route/GatewayRouterBuilder.java

@ -1,9 +1,14 @@
package camel.central.gateway.route;
import camel.central.gateway.processor.ErrorHandle;
import camel.central.gateway.processor.GatewayProcessor;
import camel.central.gateway.processor.WsProcessor;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jetty.JettyHttpComponent;
import org.apache.camel.util.jsse.KeyManagersParameters;
import org.apache.camel.util.jsse.KeyStoreParameters;
import org.apache.camel.util.jsse.SSLContextParameters;
import org.springframework.stereotype.Component;
/**
@ -21,6 +26,20 @@ public class GatewayRouterBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        //全局ssl设置
        KeyStoreParameters ksparams = new KeyStoreParameters();
        ksparams.setResource("D:/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);
        //EHR ag-admin网关代理
        from("jetty:http://0.0.0.0:9998?matchOnUriPrefix=true").routeId("proxy")
@ -43,6 +62,14 @@ public class GatewayRouterBuilder extends RouteBuilder {
                .routingSlip(method(GatewayProcessor.class, "route"))
                .to("bean:wsProcessor?method=responseWs");
                from("direct: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();
        //流程健康测试接口
        from("jetty:http://0.0.0.0:9999/healthy").routeId("healthy")
                .log("=========================心跳测试=====================");

+ 13 - 0
hos-web-framework/src/main/java/com/yihu/hos/web/framework/constant/ArchivesConstant.java

@ -0,0 +1,13 @@
package com.yihu.hos.web.framework.constant;
/**
 * @author HZY
 * @since 2017/06/23.
 */
public interface ArchivesConstant {
    String ACTIVE_MQ = "runtime.archive";   //active-mq消息,arbiter到broker的通讯
    String CAMEL_COMPONENT = "event.archive";  //camel组件命名
    String CAMEL_ENDPOINT = CAMEL_COMPONENT + ":queue:" + ACTIVE_MQ;   //camel的Endpoint
}

+ 0 - 3
src/main/java/com/yihu/hos/filter/SessionOutTimeFilter.java

@ -25,7 +25,6 @@ public class SessionOutTimeFilter extends OncePerRequestFilter {
        if (path.indexOf("/login") != -1
                || path.indexOf("/system/loginAction") != -1
                || path.indexOf("/error") != -1
                || path.indexOf("/monitor") != -1
                || path.indexOf("/test.jsp") != -1
                || path.indexOf("/logoutAction") != -1
                || path.indexOf(httpServletRequest.getContextPath() + "/static-dev") != -1
@ -34,8 +33,6 @@ public class SessionOutTimeFilter extends OncePerRequestFilter {
                || path.indexOf(httpServletRequest.getContextPath() + "/process") != -1
                || path.indexOf("swagger") != -1
                || path.indexOf(httpServletRequest.getContextPath() + "/v2/api-docs") != -1
                || path.indexOf("/tenant/down") != -1
                || path.indexOf("/tenant/upload") != -1
                || path.indexOf("/tenant/delFile") != -1
                || path.indexOf(httpServletRequest.getContextPath() + "/mobile") != -1) {
            filterChain.doFilter(httpServletRequest, httpServletResponse);