浏览代码

1.转移hos-camel;2.logback写消息队列

airhead 8 年之前
父节点
当前提交
1d9fb0a3bb
共有 73 个文件被更改,包括 240 次插入1698 次删除
  1. 25 0
      hos-broker/src/main/java/com/yihu/hos/broker/common/log/JmsAppender.java
  2. 0 31
      hos-broker/src/main/java/com/yihu/hos/broker/common/processor/DefaultHttpProcessor.java
  3. 0 18
      hos-broker/src/main/java/com/yihu/hos/broker/common/processor/HttpProcessor.java
  4. 30 14
      hos-broker/src/main/java/com/yihu/hos/broker/services/BusinessLogService.java
  5. 18 3
      hos-broker/src/main/java/com/yihu/hos/broker/services/camel/CamelStartBoot.java
  6. 0 19
      hos-broker/src/main/java/com/yihu/hos/broker/util/Aggregate.java
  7. 0 11
      hos-broker/src/main/java/com/yihu/hos/broker/util/Split.java
  8. 5 2
      hos-broker/src/main/resources/jndi.properties
  9. 13 45
      hos-broker/src/main/resources/logback.xml
  10. 0 14
      hos-camel/src/main/java/api1/processor/ApiProcessor.java
  11. 0 13
      hos-camel/src/main/java/api1/route/ApiRouteBulider.java
  12. 0 14
      hos-camel/src/main/java/api10/processor/ApiProcessor.java
  13. 0 13
      hos-camel/src/main/java/api10/route/ApiRouteBulider.java
  14. 0 14
      hos-camel/src/main/java/api2/processor/ApiProcessor.java
  15. 0 14
      hos-camel/src/main/java/api3/processor/ApiProcessor.java
  16. 0 14
      hos-camel/src/main/java/api4/processor/ApiProcessor.java
  17. 0 13
      hos-camel/src/main/java/api4/route/ApiRouteBulider.java
  18. 0 14
      hos-camel/src/main/java/api5/processor/ApiProcessor.java
  19. 0 13
      hos-camel/src/main/java/api5/route/ApiRouteBulider.java
  20. 0 14
      hos-camel/src/main/java/api6/processor/ApiProcessor.java
  21. 0 13
      hos-camel/src/main/java/api6/route/ApiRouteBulider.java
  22. 0 14
      hos-camel/src/main/java/api7/processor/ApiProcessor.java
  23. 0 13
      hos-camel/src/main/java/api7/route/ApiRouteBulider.java
  24. 0 14
      hos-camel/src/main/java/api8/processor/ApiProcessor.java
  25. 0 14
      hos-camel/src/main/java/api8/processor/ApiProcessor2.java
  26. 0 13
      hos-camel/src/main/java/api8/route/ApiRouteBulider.java
  27. 0 13
      hos-camel/src/main/java/api8/route/ApiRouteBulider2.java
  28. 0 14
      hos-camel/src/main/java/api9/processor/ApiProcessor.java
  29. 0 13
      hos-camel/src/main/java/api9/route/ApiRouteBulider.java
  30. 0 57
      hos-camel/src/main/java/apiasync/processor/ApiProcessor.java
  31. 0 16
      hos-camel/src/main/java/apiasync/route/ApiRouteBulider.java
  32. 0 57
      hos-camel/src/main/java/apisync/processor/ApiProcessor.java
  33. 0 16
      hos-camel/src/main/java/apisync/route/ApiRouteBulider.java
  34. 0 32
      hos-camel/src/main/java/com/yihu/hos/broker/common/processor/AggregateProcessor.java
  35. 0 104
      hos-camel/src/main/java/com/yihu/hos/camel/RouteClassBuilder.java
  36. 0 52
      hos-camel/src/main/java/com/yihu/hos/camel/RouteJavaBuilder.java
  37. 0 165
      hos-camel/src/main/java/compiler/JavaCompilerUtil.java
  38. 0 5
      hos-camel/src/main/java/gateway/README.md
  39. 0 53
      hos-camel/src/main/java/gateway/processor/ApiParam.java
  40. 0 226
      hos-camel/src/main/java/gateway/processor/AppApi.java
  41. 0 26
      hos-camel/src/main/java/gateway/processor/ErrorHandle.java
  42. 0 208
      hos-camel/src/main/java/gateway/processor/GatewayProcessor.java
  43. 0 153
      hos-camel/src/main/java/gateway/processor/ParamVerifyBean.java
  44. 0 23
      hos-camel/src/main/java/gateway/route/GatewayRouterBuilder.java
  45. 0 16
      hos-camel/src/main/java/proxy/route/ProxyRouteBuilder.java
  46. 5 0
      hos-camel2/pom.xml
  47. 0 13
      hos-camel2/src/main/java/api1/route/ApiRouteBulider.java
  48. 0 13
      hos-camel2/src/main/java/api7/route/ApiRouteBulider.java
  49. 1 1
      hos-camel2/src/main/java/api1/processor/ApiProcessor.java
  50. 3 3
      hos-camel/src/main/java/api2/route/ApiRouteBulider.java
  51. 1 1
      hos-camel2/src/main/java/api7/processor/ApiProcessor.java
  52. 3 3
      hos-camel/src/main/java/api3/route/ApiRouteBulider.java
  53. 1 1
      hos-camel/src/main/java/collect/processor/CollectProcessor0.java
  54. 3 3
      hos-camel/src/main/java/collect/route/CollectQuartzRoute.java
  55. 1 1
      hos-camel/src/main/java/com/yihu/hos/broker/util/Aggregate.java
  56. 1 1
      hos-broker/src/main/java/com/yihu/hos/broker/common/processor/AggregateProcessor.java
  57. 1 1
      hos-camel/src/main/java/com/yihu/hos/broker/common/processor/DefaultHttpProcessor.java
  58. 1 1
      hos-camel/src/main/java/com/yihu/hos/broker/common/processor/HttpProcessor.java
  59. 1 1
      hos-camel/src/main/java/com/yihu/hos/broker/util/Split.java
  60. 3 3
      hos-camel/src/main/java/crawler/route/CrawlerQuartzRoute.java
  61. 6 6
      hos-camel/src/main/java/crawler/route/CrawlerRouteBulider.java
  62. 2 2
      hos-camel/src/main/java/crawler/route/QuartzRoute.java
  63. 5 5
      hos-camel/src/main/java/crawler/route/RouteBulider1.java
  64. 1 1
      hos-camel2/src/main/java/camel/gateway/processor/ParamVerifyBean.java
  65. 21 3
      hos-camel2/src/main/java/camel/gateway/route/GatewayRouterBuilder.java
  66. 24 0
      hos-camel2/src/main/java/camel/log/JmsAppender.java
  67. 2 2
      hos-camel/src/main/java/qlc/processor/Processor0.java
  68. 1 1
      hos-camel/src/main/java/qlc/processor/Processor1.java
  69. 1 1
      hos-camel/src/main/java/qlc/processor/Processor2.java
  70. 6 7
      hos-camel/src/main/java/qlc/route/QlcRouteBulider.java
  71. 8 0
      hos-camel2/src/main/resources/jndi.properties
  72. 37 0
      hos-camel2/src/main/resources/logback.xml
  73. 10 1
      hos-parent/pom.xml

+ 25 - 0
hos-broker/src/main/java/com/yihu/hos/broker/common/log/JmsAppender.java

@ -0,0 +1,25 @@
package com.yihu.hos.broker.common.log;
import ch.qos.logback.classic.net.JMSQueueAppender;
import ch.qos.logback.classic.net.JMSTopicAppender;
import ch.qos.logback.classic.spi.ILoggingEvent;
import java.util.Map;
/**
 * Logback JMSQueueAppender
 * <p>
 * Created by l4qiang on 2017-04-12.
 */
public class JmsAppender extends JMSTopicAppender {
    @Override
    public void append(ILoggingEvent event) {
        Map<String, String> mdcPropertyMap = event.getMDCPropertyMap();
        if (mdcPropertyMap.size() == 0) {
            return;
        }
        super.append(event);
    }
}

+ 0 - 31
hos-broker/src/main/java/com/yihu/hos/broker/common/processor/DefaultHttpProcessor.java

@ -1,31 +0,0 @@
package com.yihu.hos.broker.common.processor;
import com.yihu.hos.core.datatype.StringUtil;
import net.sf.json.JSONObject;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import java.util.Iterator;
public class DefaultHttpProcessor implements Processor {
    private String paramJson;
    public DefaultHttpProcessor(String paramJson) {
        this.paramJson = paramJson;
    }
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        JSONObject jsonObject = JSONObject.fromObject(paramJson);
        Iterator iterator = jsonObject.keys();
        String queryStr = "";
        while (iterator.hasNext()) {
            String name = (String) iterator.next();
            String value = (String) jsonObject.get(name);
            queryStr += name + "=" + value + "&&";
        }
        queryStr = StringUtil.substring(queryStr, 0, queryStr.length()-2);
        outMessage.setHeader(Exchange.HTTP_QUERY, queryStr);
    }
}

+ 0 - 18
hos-broker/src/main/java/com/yihu/hos/broker/common/processor/HttpProcessor.java

@ -1,18 +0,0 @@
package com.yihu.hos.broker.common.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class HttpProcessor implements Processor {
    private String paramName;
    public HttpProcessor(String paramName) {
        this.paramName = paramName;
    }
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        Message inMessage = exchange.getIn();
        outMessage.setHeader(Exchange.HTTP_QUERY, paramName + "=" + inMessage.getBody(String.class));
    }
}

+ 30 - 14
hos-broker/src/main/java/com/yihu/hos/broker/services/BusinessLogService.java

@ -1,15 +1,18 @@
package com.yihu.hos.broker.services;
import ch.qos.logback.classic.spi.ILoggingEvent;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.broker.models.BusinessLog;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.broker.models.BusinessLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
/**
 * @created Airhead 2016/8/8.
@ -20,18 +23,31 @@ public class BusinessLogService {
    @Autowired
    private MongoOperations mongoOperations;
    public void log(String msg) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            BusinessLog businessLog = objectMapper.readValue(msg, BusinessLog.class);
            String fireTimeSource = businessLog.getFireTimeSource();
            businessLog.setFireTime(DateUtil.toTimestamp(fireTimeSource));
            businessLog.setBodyLength(businessLog.getBody().length());
            businessLog.setCreateTime(DateUtil.getSysDateTime());
            mongoOperations.save(businessLog);
        } catch (IOException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    /**
     * camel.exchangeId The exchange id
     * camel.messageId The message id
     * camel.correlationId The correlation id of the exchange if it's correlated. For example a sub message from the Splitter EIP
     * camel.transactionKey The id of the transaction for transacted exchanges.
     *                      Note the id is not unique, but its the id of the transaction template that marks the transaction boundary for the given transaction.
     *                      Hence we decided to name the key transactionKey and not transactionID to point out this fact.
     * camel.routeId The id of the route, in which the exchange is currently being routed
     * camel.breadcrumbId An unique id used for tracking messages across transports.
     * camel.contextId The camel context id used for tracking the message from different camel context.
     * @param event
     */
    public void log(ILoggingEvent event) {
        Map<String, String> mdcPropertyMap = event.getMDCPropertyMap();
        BusinessLog businessLog = new BusinessLog();
        businessLog.setFireTime(new Date(event.getTimeStamp()));
        businessLog.setExchangeId(mdcPropertyMap.get("camel.exchangeId"));
        businessLog.setTransactionKey(mdcPropertyMap.get("camel.transactionKey"));
        businessLog.setRouteId(mdcPropertyMap.get("camel.routeId"));
        businessLog.setBreadcrumbId(mdcPropertyMap.get("camel.breadcrumbId"));
        businessLog.setCamelContextId(mdcPropertyMap.get("camel.contextId"));
        businessLog.setBody(event.getMessage());
        businessLog.setBodyLength(event.getMessage().length());
        mongoOperations.save(businessLog);
    }
}

+ 18 - 3
hos-broker/src/main/java/com/yihu/hos/broker/services/camel/CamelStartBoot.java

@ -1,7 +1,10 @@
package com.yihu.hos.broker.services.camel;
import com.yihu.hos.broker.services.BrokerServerService;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.processor.interceptor.DefaultTraceFormatter;
import org.apache.camel.processor.interceptor.Tracer;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@ -34,6 +37,19 @@ public class CamelStartBoot {
        try {
            SystemCamelContext.getContext().setTracing(true);
            SystemCamelContext.getContext().setUseMDCLogging(true);
            Tracer tracer = new Tracer();
            DefaultTraceFormatter formatter = new DefaultTraceFormatter();
            formatter.setShowHeaders(true);
            formatter.setShowBody(true);
            formatter.setShowBodyType(true);
            formatter.setShowOutHeaders(true);
            formatter.setShowOutBody(true);
            formatter.setShowOutBodyType(true);
            tracer.setFormatter(formatter);
            SystemCamelContext.getContext().getProperties().put(Exchange.LOG_DEBUG_BODY_STREAMS, "true");
            SystemCamelContext.getContext().start();
            List<URL> URLs = new ArrayList<>();
@ -50,14 +66,13 @@ public class CamelStartBoot {
            SynchronousQueue<String> camelContextOperateQueue = SystemCamelContext.getQueue();
            String className;
            while ((className = camelContextOperateQueue.take()) != null) {
                try{
                try {
                    Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>) camelClassLoader.loadClass(className);
                    if (routeBuilderClass != null) {
                        RouteBuilder routeBuilder = routeBuilderClass.newInstance();
                        SystemCamelContext.getContext().addRoutes(routeBuilder);
                    }
                }
                catch (ClassNotFoundException e){
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                    logger.error("加载数据Class失败。");
                }

+ 0 - 19
hos-broker/src/main/java/com/yihu/hos/broker/util/Aggregate.java

@ -1,19 +0,0 @@
package com.yihu.hos.broker.util;
import org.apache.camel.Exchange;
import org.apache.camel.processor.aggregate.AggregationStrategy;
public class Aggregate implements AggregationStrategy {
    public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
        //如果oldExchange为null,则说明是第一个分解包
        if (oldExchange == null) {
            return newExchange;
        }
        String oldBody = oldExchange.getIn().getBody(String.class);
        String newBody = newExchange.getIn().getBody(String.class);
        //将新与旧包进行合并,再设置进Message的body中
        oldExchange.getIn().setBody(oldBody + "\n" + newBody);
        return oldExchange;
    }
}

+ 0 - 11
hos-broker/src/main/java/com/yihu/hos/broker/util/Split.java

@ -1,11 +0,0 @@
package com.yihu.hos.broker.util;
import net.sf.json.JSONArray;
import org.apache.camel.Body;
public class Split {
    public JSONArray splitJsonArray(@Body String jsonArrayStr) {
        return JSONArray.fromObject(jsonArrayStr);
    }
}

+ 5 - 2
hos-broker/src/main/resources/jndi.properties

@ -1,4 +1,7 @@
connectionFactoryNames = queueConnectionFactory
connectionFactoryNames = ConnectionFactory
# register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
queue.my-logback-queue = business.log.queue
# queue.logback-queue = business.log.queue
# topic.[jndiName] = [physicalName]
topic.logback-queue = business.log.queue

+ 13 - 45
hos-broker/src/main/resources/logback.xml

@ -13,14 +13,6 @@
        </filter>
    </appender>
    <!--<appender name="file" class="ch.qos.logback.core.FileAppender">-->
        <!--<file>${LOG_HOME}/main.log</file>-->
        <!--<append>true</append>-->
        <!--<encoder>-->
            <!--<Pattern>%date [%thread] %-5level %logger{25} - %msg%n</Pattern>-->
        <!--</encoder>-->
    <!--</appender>-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">    
        <file>${LOG_HOME}/output.log</file>        
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
@ -37,45 +29,21 @@
        </encoder>
    </appender>
    <!-- 文件日志:输出全部日志到文件 根据时间和文件大小滚动 -->
    <!--<appender name="FILE_SizeAndTime" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
        <!--<file>${LOG_HOME}/output.log</file>-->
        <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
            <!--<fileNamePattern>${LOG_HOME}/output.%d{yyyy-MM-dd_HH_mm}.%i.log</fileNamePattern>-->
            <!--<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
                <!--<maxFileSize>100M</maxFileSize>-->
            <!--</timeBasedFileNamingAndTriggeringPolicy>-->
            <!--&lt;!&ndash; keep X days' worth of history &ndash;&gt;-->
            <!--<maxHistory>3</maxHistory>-->
            <!--<cleanHistoryOnStart>true</cleanHistoryOnStart>-->
        <!--</rollingPolicy>-->
        <!--<append>true</append>-->
        <!--<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">-->
            <!--<Pattern>%date [%thread] %-5level %logger{25} - %msg%n</Pattern>-->
            <!--<charset>utf-8</charset>-->
        <!--</encoder>-->
    <!--</appender>-->
    <!--<appender name="queue" class="ch.qos.logback.classic.net.JMSQueueAppender">-->
        <!--<InitialContextFactoryName>-->
            <!--org.apache.activemq.jndi.ActiveMQInitialContextFactory-->
        <!--</InitialContextFactoryName>-->
        <!--<ProviderURL>tcp://172.19.103.57:61616</ProviderURL>-->
        <!--<userName>admin</userName>-->
        <!--<password>admin</password>-->
        <!--<QueueConnectionFactoryBindingName>queueConnectionFactory</QueueConnectionFactoryBindingName>-->
        <!--<QueueBindingName>my-logback-queue</QueueBindingName>-->
    <!--</appender>-->
    <!--<logger name="JMS_LOGGER" level="INFO" additivity="false">-->
        <!--<appender-ref ref="queue"/>-->
    <!--</logger>-->
    <appender name="queue" class="com.yihu.hos.broker.common.log.JmsAppender">
        <InitialContextFactoryName>
            org.apache.activemq.jndi.ActiveMQInitialContextFactory
        </InitialContextFactoryName>
        <ProviderURL>tcp://172.19.103.57:61616</ProviderURL>
        <userName>admin</userName>
        <password>admin</password>
        <TopicConnectionFactoryBindingName>ConnectionFactory</TopicConnectionFactoryBindingName>
        <TopicBindingName>logback-queue</TopicBindingName>
    </appender>
    <!--<logger name="br.org.roger.logback" level="INFO" additivity="false">-->
    <!--<appender-ref ref="console" />-->
    <!--</logger>-->
    <logger name="org.apache.camel" level="INFO" additivity="false">
        <appender-ref ref="queue"/>
    </logger>
    <logger name="org.apache.camel" level="WARN"/>
    <logger name="org.hibernate" level="WARN"/>
    <logger name="org.springframework" level="WARN"/>
    <logger name="springfox.documentation" level="WARN"/>

+ 0 - 14
hos-camel/src/main/java/api1/processor/ApiProcessor.java

@ -1,14 +0,0 @@
package api1.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,helloWorld 打印camel接口");
        outMessage.setBody("hello,api1");
    }
}

+ 0 - 13
hos-camel/src/main/java/api1/route/ApiRouteBulider.java

@ -1,13 +0,0 @@
package api1.route;
import api1.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v7").routeId("api1")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 0 - 14
hos-camel/src/main/java/api10/processor/ApiProcessor.java

@ -1,14 +0,0 @@
package api10.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,helloWorld 打印camel接口");
        outMessage.setBody("hello,api10");
    }
}

+ 0 - 13
hos-camel/src/main/java/api10/route/ApiRouteBulider.java

@ -1,13 +0,0 @@
package api10.route;
import api10.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v10").routeId("api10")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 0 - 14
hos-camel/src/main/java/api2/processor/ApiProcessor.java

@ -1,14 +0,0 @@
package api2.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,helloWorld 打印camel接口");
        outMessage.setBody("hello,api2");
    }
}

+ 0 - 14
hos-camel/src/main/java/api3/processor/ApiProcessor.java

@ -1,14 +0,0 @@
package api3.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,helloWorld 打印camel接口");
        outMessage.setBody("hello,api3");
    }
}

+ 0 - 14
hos-camel/src/main/java/api4/processor/ApiProcessor.java

@ -1,14 +0,0 @@
package api4.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,helloWorld 打印camel接口");
        outMessage.setBody("hello,api4");
    }
}

+ 0 - 13
hos-camel/src/main/java/api4/route/ApiRouteBulider.java

@ -1,13 +0,0 @@
package api4.route;
import api4.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v4").routeId("api4")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 0 - 14
hos-camel/src/main/java/api5/processor/ApiProcessor.java

@ -1,14 +0,0 @@
package api5.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,helloWorld 打印camel接口");
        outMessage.setBody("hello,api5");
    }
}

+ 0 - 13
hos-camel/src/main/java/api5/route/ApiRouteBulider.java

@ -1,13 +0,0 @@
package api5.route;
import api5.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v5").routeId("api5")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 0 - 14
hos-camel/src/main/java/api6/processor/ApiProcessor.java

@ -1,14 +0,0 @@
package api6.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,helloWorld 打印camel接口");
        outMessage.setBody("hello,api6");
    }
}

+ 0 - 13
hos-camel/src/main/java/api6/route/ApiRouteBulider.java

@ -1,13 +0,0 @@
package api6.route;
import api6.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v6").routeId("api6")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 0 - 14
hos-camel/src/main/java/api7/processor/ApiProcessor.java

@ -1,14 +0,0 @@
package api7.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,helloWorld 打印camel接口");
        outMessage.setBody("hello,api7");
    }
}

+ 0 - 13
hos-camel/src/main/java/api7/route/ApiRouteBulider.java

@ -1,13 +0,0 @@
package api7.route;
import api7.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v1").routeId("api7")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 0 - 14
hos-camel/src/main/java/api8/processor/ApiProcessor.java

@ -1,14 +0,0 @@
package api8.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,helloWorld 打印camel接口");
        outMessage.setBody("hello,api8");
    }
}

+ 0 - 14
hos-camel/src/main/java/api8/processor/ApiProcessor2.java

@ -1,14 +0,0 @@
package api8.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class ApiProcessor2 implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,helloWorld 打印camel接口");
        outMessage.setBody("hello,api8vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
    }
}

+ 0 - 13
hos-camel/src/main/java/api8/route/ApiRouteBulider.java

@ -1,13 +0,0 @@
package api8.route;
import api8.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v8").routeId("api8")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 0 - 13
hos-camel/src/main/java/api8/route/ApiRouteBulider2.java

@ -1,13 +0,0 @@
package api8.route;
import api8.processor.ApiProcessor2;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider2 extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v8").routeId("api8")
                .process(new ApiProcessor2()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 0 - 14
hos-camel/src/main/java/api9/processor/ApiProcessor.java

@ -1,14 +0,0 @@
package api9.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        System.out.println("测试,helloWorld 打印camel接口");
        outMessage.setBody("hello,api9");
    }
}

+ 0 - 13
hos-camel/src/main/java/api9/route/ApiRouteBulider.java

@ -1,13 +0,0 @@
package api9.route;
import api9.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v9").routeId("api9")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 0 - 57
hos-camel/src/main/java/apiasync/processor/ApiProcessor.java

@ -1,57 +0,0 @@
package apiasync.processor;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.http.common.HttpMessage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
 * @author Airhead
 * @since 2016-11-13
 */
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        // 因为很明确消息格式是http的,所以才使用这个类
        // 否则还是建议使用org.apache.camel.Message这个抽象接口
        HttpMessage message = (HttpMessage) exchange.getIn();
        InputStream bodyStream = (InputStream) message.getBody();
        String inputContext = this.analysisMessage(bodyStream);
        bodyStream.close();
        // 存入到exchange的out区域
        if (exchange.getPattern() == ExchangePattern.InOut) {
            Message outMessage = exchange.getOut();
            outMessage.setBody("hello," + inputContext);
        }
    }
    /**
     * 从stream中分析字符串内容
     *
     * @param bodyStream
     * @return
     */
    private String analysisMessage(InputStream bodyStream) throws IOException {
        if (bodyStream == null) {
            return "";
        }
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] contextBytes = new byte[4096];
        int realLen;
        while ((realLen = bodyStream.read(contextBytes, 0, 4096)) != -1) {
            outStream.write(contextBytes, 0, realLen);
        }
        // 返回从Stream中读取的字串
        try {
            return new String(outStream.toByteArray(), "UTF-8");
        } finally {
            outStream.close();
        }
    }
}

+ 0 - 16
hos-camel/src/main/java/apiasync/route/ApiRouteBulider.java

@ -1,16 +0,0 @@
package apiasync.route;
import apiasync.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
/**
 * @author Airhead
 * @since 2016-11-13
 */
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://localhost:9090/api/v1/invokeAsync").routeId("invokeAsync")
                .process(new ApiProcessor());
    }
}

+ 0 - 57
hos-camel/src/main/java/apisync/processor/ApiProcessor.java

@ -1,57 +0,0 @@
package apisync.processor;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.http.common.HttpMessage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
 * @author Airhead
 * @since 2016-11-13
 */
public class ApiProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        // 因为很明确消息格式是http的,所以才使用这个类
        // 否则还是建议使用org.apache.camel.Message这个抽象接口
        HttpMessage message = (HttpMessage) exchange.getIn();
        InputStream bodyStream = (InputStream) message.getBody();
        String inputContext = this.analysisMessage(bodyStream);
        bodyStream.close();
        // 存入到exchange的out区域
        if (exchange.getPattern() == ExchangePattern.InOut) {
            Message outMessage = exchange.getOut();
            outMessage.setBody("hello.123," + inputContext);
        }
    }
    /**
     * 从stream中分析字符串内容
     *
     * @param bodyStream
     * @return
     */
    private String analysisMessage(InputStream bodyStream) throws IOException {
        if (bodyStream == null) {
            return "";
        }
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] contextBytes = new byte[4096];
        int realLen;
        while ((realLen = bodyStream.read(contextBytes, 0, 4096)) != -1) {
            outStream.write(contextBytes, 0, realLen);
        }
        // 返回从Stream中读取的字串
        try {
            return new String(outStream.toByteArray(), "UTF-8");
        } finally {
            outStream.close();
        }
    }
}

+ 0 - 16
hos-camel/src/main/java/apisync/route/ApiRouteBulider.java

@ -1,16 +0,0 @@
package apisync.route;
import apisync.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
/**
 * @author Airhead
 * @since 2016-11-13
 */
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://localhost:9090/api/v1/invokeSync").routeId("invokeSync")
                .process(new ApiProcessor());
    }
}

+ 0 - 32
hos-camel/src/main/java/com/yihu/hos/broker/common/processor/AggregateProcessor.java

@ -1,32 +0,0 @@
package com.yihu.hos.broker.common.processor;
import net.sf.json.JSONObject;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import java.util.Iterator;
public class AggregateProcessor implements Processor {
    private String paramJson;
    public AggregateProcessor(String paramJson) {
        this.paramJson = paramJson;
    }
    public void process(Exchange exchange) throws Exception {
        Message inMessage = exchange.getIn();
        Message outMessage = exchange.getOut();
        JSONObject jsonObject = JSONObject.fromObject(paramJson);
        Iterator iterator = jsonObject.keys();
        while (iterator.hasNext()) {
            String name = (String) iterator.next();
            String value = (String) jsonObject.get(name);
            outMessage.setHeader(name, value);
        }
        String body = inMessage.getBody(String.class);
        outMessage.setBody(body);
    }
}

+ 0 - 104
hos-camel/src/main/java/com/yihu/hos/camel/RouteClassBuilder.java

@ -1,104 +0,0 @@
package com.yihu.hos.camel;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import java.io.File;
import java.io.FileWriter;
import java.util.List;
/**
 * Created by lingfeng on 2016/8/29.
 */
public class RouteClassBuilder {
    private String packageTemplate = "package com.yihu.hos.%s;%n";
    private String importTemplate = "import org.apache.camel.builder.RouteBuilder;%n" +
            "import org.apache.camel.model.dataformat.XmlJsonDataFormat;%n";
    private String classDefineTemplate = "public class %s extends RouteBuilder {%n";
    private String packagePathTemplate = System.getProperty("user.dir")//获取到项目的根路径
            + "/src/main/java/com/yihu/hos/%s";
    private String classPathTemplate = System.getProperty("user.dir")//获取到项目的根路径
            + "/src/main/java/com/yihu/hos/%s/%s.java";
    private String classUrlTemplate = "com.yihu.hos.%s;";
    private String configureTemplate = "    @Override%n" +
            "    public void configure() throws Exception {%n" +
            "%s%n"+
            "    }%n" +
            "}%n";
    private String className;
    private String packageName;
    private String configureXml;
    public void generator () throws Exception {
        Document document = DocumentHelper.parseText(configureXml);
        Element camelContext = document.getRootElement();
        ///分割數據
        Element route = camelContext.element("route");
        List<Element> endpoints = route.elements();
        StringBuilder configureInfo = new StringBuilder();
        for (Element element : endpoints) {
            configureInfo.append(element.getName() + "(\"" + element.attribute("uri").getValue() + "\").");
        }
        String source = String.format(packageTemplate, packageName) +
                String.format(importTemplate) +
                String.format(classDefineTemplate, className) +
                String.format(configureTemplate, configureInfo.substring(0, configureInfo.length() - 1) + ";");
        File packagePath = new File(String.format(packagePathTemplate, packageName));
        if (!packagePath.exists()) {
            packagePath.mkdir();
        }
        File f = new File(String.format(classPathTemplate, packageName, className));
        FileWriter fw = new FileWriter(f);
        fw.write(source);
        fw.flush();
        fw.close();//这里只是产生一个JAVA文件,简单的IO操作
        // compile下面开始编译这个Store.java
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null,
                null, null);
        Iterable units = fileMgr.getJavaFileObjects(String.format(classPathTemplate, packageName, className));
        JavaCompiler.CompilationTask t = compiler.getTask(null, fileMgr, null, null, null,
                units);
        t.call();
        fileMgr.close();
        // load into memory and create an instance
//        URL[] urls = new URL[] { new URL("file:/"
//                + System.getProperty("user.dir") + "/src/main/java") };
//        URLClassLoader ul = new URLClassLoader(urls);
//        //客户端调用
//        Class<IHelloWord> helloWordClass = (Class<IHelloWord>) ul.loadClass(String.format(classUrlTemplate, className));
//        if (helloWordClass != null) {
//            IHelloWord helloWord = helloWordClass.newInstance();
//            helloWord.getHelloWord();
//        }
    }
    public String getClassName() {
        return className;
    }
    public void setClassName(String className) {
        this.className = className;
    }
    public String getPackageName() {
        return packageName;
    }
    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }
    public String getConfigureXml() {
        return configureXml;
    }
    public void setConfigureXml(String configureXml) {
        this.configureXml = configureXml;
    }
}

+ 0 - 52
hos-camel/src/main/java/com/yihu/hos/camel/RouteJavaBuilder.java

@ -1,52 +0,0 @@
package com.yihu.hos.camel;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import java.io.File;
import java.io.FileWriter;
import java.util.List;
/**
 * Created by lingfeng on 2016/8/29.
 */
public class RouteJavaBuilder {
    private String packageTemplate = "package com.yihu.hos.%s;%n";
    private String importTemplate = "import org.apache.camel.builder.RouteBuilder;%n" +
            "import org.apache.camel.model.dataformat.XmlJsonDataFormat;%n";
    private String javaDefineTemplate = "public class %s extends RouteBuilder {%n";
    private String packagePathTemplate = System.getProperty("user.dir")//获取到项目的根路径
            + "/src/main/java/com/yihu/hos/%s";
    private String classPathTemplate = System.getProperty("user.dir")//获取到项目的根路径
            + "/src/main/java/com/yihu/hos/%s/%s.java";
    private String javaUrlTemplate = "com.yihu.hos.%s;";
    private String configureTemplate = "    @Override%n" +
            "    public void configure() throws Exception {%n" +
            "%s%n"+
            "    }%n" +
            "}%n";
    private String javaName;
    private String packageName;
    private String configureXml;
    public void generator (String configureInfo) throws Exception {
        String source = String.format(packageTemplate, packageName) +
                String.format(importTemplate) +
                String.format(javaDefineTemplate, javaName) +
                String.format(configureTemplate, configureInfo.substring(0, configureInfo.length() - 1) + ";");
        File packagePath = new File(String.format(packagePathTemplate, packageName));
        if (!packagePath.exists()) {
            packagePath.mkdir();
        }
        File f = new File(String.format(classPathTemplate, packageName, javaName));
        FileWriter fw = new FileWriter(f);
        fw.write(source);
        fw.flush();
        fw.close();//这里只是产生一个JAVA文件,简单的IO操作
    }
}

+ 0 - 165
hos-camel/src/main/java/compiler/JavaCompilerUtil.java

@ -1,165 +0,0 @@
package compiler;
import com.yihu.hos.core.file.FileUtil;
import javax.tools.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
/**
 *  java编译工具类
 * @author HZY
 * @vsrsion 1.0
 * Created at 2016/11/17.
 */
public class JavaCompilerUtil {
    private static String packagePathTemplate = System.getProperty("user.dir")//获取到项目的根路径
            + "/hos-camel/src/main/java/";
    private static String classPathTemplate = System.getProperty("user.dir")//获取到项目的根路径
            + "/hos-camel/src/main/java/%s/%s.java";
    /**
     * 编译java文件
     * @param packageName     java包路径
     * @param oldClassName   旧java文件名
     * @param newClassName   新java文件名
     * @param newCron         新cron表达式
     * @throws IOException
     */
    public static void compiler(String packageName,String oldClassName,String newClassName,String newCron) throws IOException {
        String classPath = JavaCompilerUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath() ;
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        // 建立DiagnosticCollector对象
        DiagnosticCollector diagnostics = new DiagnosticCollector();
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
        // 建立源文件对象,每个文件被保存在一个从JavaFileObject继承的类中
        File file = genNewJava(packageName, oldClassName,newClassName, newCron);
        if (file!=null){
            Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(file.getAbsolutePath());
            // options命令行选项
            Iterable<String> options = Arrays.asList("-d",classPath);// 指定的路径一定要存在,javac不会自己创建文件夹
            JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, options, null, compilationUnits);
            // 编译源程序
            boolean success = task.call();
            if (!success){
                List diagnostics1 = diagnostics.getDiagnostics();
                for (int i=0;i<diagnostics1.size();i++){
                    System.out.println(diagnostics1.get(i).toString());
                }
            }
            fileManager.close();
            System.out.println((success) ? "编译成功" : "编译失败");
        }
    }
    /**
     *  修改cron表达式,生成新java文件
     * @param packageName   包名
     * @param oldClassName  旧类名
     * @param newClassName  新类名
     * @param newContent    新cron表达式
     */
    public static File genNewJava(String packageName, String oldClassName,String newClassName, String newContent) {
        try {
            String oldPath = String.format(classPathTemplate, packageName, oldClassName);
            String newPath = String.format(classPathTemplate, packageName, newClassName);
            String text = FileUtil.readFileText(new File(oldPath));
            if (text.contains("?cron=")){
                String oldStr = text.substring(text.indexOf("?cron=")+6);
                String cron = oldStr.substring(0,oldStr.indexOf("\""));
                text = text.replace(cron,newContent);
            }
            if (text.contains(oldClassName)){
                text = text.replace(oldClassName,newClassName);
            }
            File f = new File(newPath);
            FileWriter fw = new FileWriter(f);
            fw.write(text);
            fw.flush();
            fw.close();//这里只是产生一个JAVA文件,简单的IO操作
            return f;
        }
        catch (Exception e) {
            System.out.println("修改操作出错");
            e.printStackTrace();
        }
        return null;
    }
    public static void compiler2(String packageName,String className) throws IOException {
        String classPath = JavaCompilerUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath() ;
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        // 建立DiagnosticCollector对象
        DiagnosticCollector diagnostics = new DiagnosticCollector();
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
        // 建立源文件对象,每个文件被保存在一个从JavaFileObject继承的类中
        Iterable compilationUnits = fileManager.getJavaFileObjects(String.format(classPathTemplate, packageName, className));
        // options命令行选项
        // 指定的路径一定要存在,javac不会自己创建文件夹
        Iterable<String> options = Arrays.asList(  "-d", classPath);
        JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, options, null, compilationUnits);
        // 编译源程序
        boolean success = task.call();
        if (!success){
            List diagnostics1 = diagnostics.getDiagnostics();
            for (int i=0;i<diagnostics1.size();i++){
                System.out.println(diagnostics1.get(i).toString());
            }
        }
        fileManager.close();
        System.out.println((success) ? "编译成功" : "编译失败");
    }
    public static void testCompiler(String path,String packageName,String className) throws IOException {
        String javaPath = path+ "/%s/%s.java";
        String classPath = JavaCompilerUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath() ;
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        // 建立DiagnosticCollector对象
        DiagnosticCollector diagnostics = new DiagnosticCollector();
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
        // 建立源文件对象,每个文件被保存在一个从JavaFileObject继承的类中
        Iterable compilationUnits = fileManager.getJavaFileObjects(String.format(javaPath, packageName, className));
        // options命令行选项
        // 指定的路径一定要存在,javac不会自己创建文件夹
        Iterable<String> options = Arrays.asList(  "-d", path);
        JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, options, null, compilationUnits);
        // 编译源程序
        boolean success = task.call();
        if (!success){
            List diagnostics1 = diagnostics.getDiagnostics();
            for (int i=0;i<diagnostics1.size();i++){
                System.out.println(diagnostics1.get(i).toString());
            }
        }
        fileManager.close();
        System.out.println((success) ? "编译成功" : "编译失败");
    }
    public static void main(String[] args) {
        try {
//            compiler("/crawler/route", "QuartzRoute","QuartzRoute001","xx000xx");
            testCompiler("D:/", "/crawler/route", "QuartzRoute");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

+ 0 - 5
hos-camel/src/main/java/gateway/README.md

@ -1,5 +0,0 @@
# 说明
Gateway是智慧医疗云的统一网关。所有外部访问的请求都需要经过统一网关进行访问。
# 配置说明
信息共享平台使用动态加载路由的方式,所以在路由的配置信息可以直接书写在代码中,
为了统一修改参数会定义出来一个统一的配置文件。

+ 0 - 53
hos-camel/src/main/java/gateway/processor/ApiParam.java

@ -1,53 +0,0 @@
package gateway.processor;
/**
 * @author Airhead
 * @since 2017/3/17.
 */
public class ApiParam {
    private String name;
    private String type;
    private String dataType;
    private String required;
    private String defaultValue;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getDataType() {
        return dataType;
    }
    public void setDataType(String dataType) {
        this.dataType = dataType;
    }
    public String getRequired() {
        return required;
    }
    public void setRequired(String required) {
        this.required = required;
    }
    public String getDefaultValue() {
        return defaultValue;
    }
    public void setDefaultValue(String defaultValue) {
        this.defaultValue = defaultValue;
    }
}

+ 0 - 226
hos-camel/src/main/java/gateway/processor/AppApi.java

@ -1,226 +0,0 @@
package gateway.processor;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
/**
 * @author Airhead
 * @since 2017/3/15.
 */
public class AppApi {
    private String name;
    private String type;
    private String method;
    private String protocol;
    private String version;
    private String activityType;
    private String openLevel;
    private String auditLevel;
    private String methodName;
    private String microServiceUri;
    private String msMethodName;
    private String microServiceName;
    private Collection<ApiParam> parameters;
    public AppApi() {
    }
    public static AppApi parse(String apiInfo) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readValue(apiInfo, JsonNode.class);
        JsonNode detailModelList = jsonNode.get("detailModelList");
        if (detailModelList != null && detailModelList.isArray() && detailModelList.size() != 0) {
            JsonNode apiNode = detailModelList.get(0);
            AppApi appApi = new AppApi();
            appApi.setName(apiNode.path("name").asText());
            appApi.setType(apiNode.path("type").asText());
            appApi.setMethod(apiNode.path("method").asText());
            appApi.setProtocol(apiNode.path("protocol").asText());
            appApi.setVersion(apiNode.path("version").asText());
            appApi.setMethodName(apiNode.path("methodName").asText());
            appApi.setMicroServiceUri(apiNode.path("microServiceUri").asText());
            appApi.setMsMethodName(apiNode.path("msMethodName").asText());
            appApi.setMethodName(apiNode.path("methodName").asText());
            appApi.setMicroServiceName(apiNode.path("microServiceName").asText());
            JsonNode parametersNode = apiNode.get("parameters");
            Collection<ApiParam> parameters = new ArrayList<>();
            if (parametersNode != null && parametersNode.size() != 0) {
                parametersNode.forEach(paramNode -> {
                    ApiParam apiParam = new ApiParam();
                    apiParam.setName(paramNode.path("name").asText());
                    apiParam.setType(paramNode.path("type").asText());
                    apiParam.setDataType(paramNode.path("dataType").asText());
                    apiParam.setDefaultValue(paramNode.path("defaultValue").asText());
                    parameters.add(apiParam);
                });
            }
            appApi.setParameters(parameters);
            return appApi;
        }
        return null;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getMethod() {
        return method;
    }
    public void setMethod(String method) {
        this.method = method;
    }
    public String getProtocol() {
        return protocol;
    }
    public void setProtocol(String protocol) {
        this.protocol = protocol;
    }
    public String getVersion() {
        return version;
    }
    public void setVersion(String version) {
        this.version = version;
    }
    public String getActivityType() {
        return activityType;
    }
    public void setActivityType(String activityType) {
        this.activityType = activityType;
    }
    public String getOpenLevel() {
        return openLevel;
    }
    public void setOpenLevel(String openLevel) {
        this.openLevel = openLevel;
    }
    public String getAuditLevel() {
        return auditLevel;
    }
    public void setAuditLevel(String auditLevel) {
        this.auditLevel = auditLevel;
    }
    public String getMethodName() {
        return methodName;
    }
    public void setMethodName(String methodName) {
        this.methodName = methodName;
    }
    public String getMicroServiceUri() {
        return microServiceUri;
    }
    public void setMicroServiceUri(String microServiceUri) {
        this.microServiceUri = microServiceUri;
    }
    public String getMsMethodName() {
        return msMethodName;
    }
    public void setMsMethodName(String msMethodName) {
        this.msMethodName = msMethodName;
    }
    public String getMicroServiceName() {
        return microServiceName;
    }
    public void setMicroServiceName(String microServiceName) {
        this.microServiceName = microServiceName;
    }
    public Collection<ApiParam> getParameters() {
        return parameters;
    }
    public void setParameters(Collection<ApiParam> parameters) {
        this.parameters = parameters;
    }
    static class Param {
        private String name;
        private String type;
        private String dataType;
        private String required;
        private String defaultValue;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
        public String getDataType() {
            return dataType;
        }
        public void setDataType(String dataType) {
            this.dataType = dataType;
        }
        public String getRequired() {
            return required;
        }
        public void setRequired(String required) {
            this.required = required;
        }
        public String getDefaultValue() {
            return defaultValue;
        }
        public void setDefaultValue(String defaultValue) {
            this.defaultValue = defaultValue;
        }
    }
}

+ 0 - 26
hos-camel/src/main/java/gateway/processor/ErrorHandle.java

@ -1,26 +0,0 @@
package gateway.processor;
import org.springframework.stereotype.Component;
/**
 * @author Airhead
 * @since 2017/3/17.
 */
@Component("errorHandle")
public class ErrorHandle {
    public String paramError(){
        return "paramError";
    }
    public String outdataError(){
        return "outdataError";
    }
    public String signValidError(){
        return "signValidError";
    }
    public String unauthorizedError(){
        return "unauthorizedError";
    }
}

+ 0 - 208
hos-camel/src/main/java/gateway/processor/GatewayProcessor.java

@ -1,208 +0,0 @@
package gateway.processor;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.http.HTTPResponse;
import com.yihu.hos.core.http.HttpClientKit;
import org.apache.camel.Body;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class GatewayProcessor implements Processor {
    static Map<String, AppApi> apiMap = new HashMap<>();
    public void process(Exchange exchange) throws Exception {
    }
    public String secret(@Body String body, Exchange exchange) throws IOException, ParseException {
        System.out.println(body);
        String appKey = exchange.getIn().getHeaders().get("appKey").toString();
        return "restlet:http://sdw2:10000/api/v1.0/admin/apps/" + appKey;
    }
    public String route(@Body Map<String, Object> body, Exchange exchange) throws IOException, ParseException {
//        body = URLDecoder.decode(body, "UTF-8");
        if ("true".equals(body.get("successFlg"))) {
            return "jetty:http://0.0.0.0:9999/error/paramError";    //TODO:
        }
        Map<String, Object> obj = (Map) body.get("obj");
        if (obj == null) {
            return "jetty:http://0.0.0.0:9999/error/paramError";    //TODO:
        }
        String secret = obj.get("secret").toString();
        Map<String, Object> params = exchange.getIn().getHeaders();
        boolean pass = checkParams(params);
        if (!pass) {
            return "jetty:http://0.0.0.0:9999/error/paramError";    //TODO:
        }
        pass = checkTimeStamp(params);
        if (!pass) {
            return "jetty:http://0.0.0.0:9999/error/outdataError";    //TODO:
        }
        pass = checkSign(params, secret);
        if (!pass) {
            return "jetty:http://0.0.0.0:9999/error/signValidError";    //TODO:
        }
        pass = checkAuthorized(params);
        if (!pass) {
            return "jetty:http://0.0.0.0:9999/error/unauthorizedError";    //TODO:
        }
        return genEndpoint(params, exchange);
    }
    private boolean checkParams(Map<String, Object> params) {
        Object api = params.get("api");                     // API接口名称
        Object sign = params.get("sign");                     // 簽名
        Object timestamp = params.get("timestamp");        // 时间戳
        Object appKey = params.get("appKey");               // HOP分配给应用的AppKey ,创建应用时可获得
        Object version = params.get("v");                   // API协议版本
        return !(StringUtil.isEmpty(api) || StringUtil.isEmpty(timestamp)
                || StringUtil.isEmpty(appKey) || StringUtil.isEmpty(version)
                || StringUtil.isEmpty(sign));
    }
    private boolean checkTimeStamp(Map<String, Object> params) throws ParseException {
        final long ONE_MIN = 60000; //millisecond
        String timestamp = params.get("timestamp").toString();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
        java.util.Date ts = format.parse(timestamp);
        if (ts == null) {
            return false;   //时间格式不正确
        }
        Calendar date = Calendar.getInstance();
        long timeInMillis = date.getTimeInMillis();
        java.util.Date min = new java.util.Date(timeInMillis - 5 * ONE_MIN);
        java.util.Date max = new java.util.Date(timeInMillis + 5 * ONE_MIN);
        return ts.after(min) && ts.before(max);
    }
    private boolean checkSign(Map<String, Object> params, String secret) {
        try {
            String sign = params.get("sign").toString();                     // 簽名
            ParamVerifyBean paramSign = new ParamVerifyBean();
            paramSign.addParam(params);
//            paramSign.genParam();
            //TODO 获取app secret传入验证
            String md5Sign = paramSign.signParam(secret);
            if (!md5Sign.equals(sign)) {
                System.out.println("传递的签名:" + sign);
                System.out.println("生成的签名:" + md5Sign);
                return false;
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    private boolean checkAuthorized(Map<String, Object> params) {
        ObjectMapper objectMapper = new ObjectMapper();
        HTTPResponse response = HttpClientKit.get("http://localhost:10000/api/v1.0/admin/appApiAuth?appId=" + params.get("appKey") + "&apiName="+ apiMap.get("api"));
        if (response.getStatusCode() != 200) {
            System.out.println("验证API权限,请求失败!");
            return false;
        }
        try {
            Map map = objectMapper.readValue(response.getBody(), Map.class);
            if ((Boolean) map.get("successFlg")){
                return true;
            }else {
                System.out.println("验证失败:"+map.get("errorMsg"));
                return false;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
    private Map<String, String> parseBody(String body) throws IOException {
        return Stream.of(body.split("&")).map(obj -> obj.split("="))
                .collect(Collectors.toMap(entry -> entry[0], entry -> entry[1]));
    }
    private String genEndpoint(Map<String, Object> params, Exchange exchange) {
        String api = params.get("api").toString();                     // API接口名称
        String param = params.get("param").toString();
        AppApi appApi = getApiInfo(api);
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            if (appApi == null) {
                return "";
            }
            JsonNode jsonNode = objectMapper.readValue(param, JsonNode.class);
            String host = appApi.getMicroServiceUri().split(",")[0];
            String endPoint = "restlet:http://" + host + appApi.getMethodName() + "restletMethods=" + appApi.getMethod();
            final String[] body = {""};
            appApi.getParameters().forEach(p -> {
                String value = jsonNode.asText(p.getName());
                if (p.getType().equals("2")) { //path param
                    endPoint.replace("{" + p.getName() + "}", value);
                }
                body[0] += ("&" + p.getName() + "=" + value);
            });
            if (body[0].length() != 0) {
                exchange.getOut().setBody(body[0].substring(1));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    private AppApi getApiInfo(String api) {
        AppApi appApi = apiMap.get(api);
        if (appApi != null) {
            return appApi;
        }
        HTTPResponse response = HttpClientKit.get("http://localhost:10000/api/v1.0/admin/appApi/search?filters=msMethodName%3D" + api + "&size=15&page=1");
        if (response.getStatusCode() != 200) {
            return null;
        }
        try {
            appApi = AppApi.parse(response.getBody());
            apiMap.put(api, appApi);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        return appApi;
    }
}

+ 0 - 153
hos-camel/src/main/java/gateway/processor/ParamVerifyBean.java

@ -1,153 +0,0 @@
package gateway.processor;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.encrypt.MD5;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/3/15.
 */
public class ParamVerifyBean {
    private final String version = "1.0";
    private TreeMap<String, String> paramMap = new TreeMap<>();
    private String timestamp;
    //TODO 配置文件中配置
    private String gatewayUrl = "seb-gatewayUrl";
    private String api;
    private String appKey = "esb-key";
    private String token;
    public static void main(String[] args) throws Exception {
        ParamVerifyBean paramSignUtil = new ParamVerifyBean();
        paramSignUtil.setApi("collect");
        paramSignUtil.addParam("patientId", "11111", true);
        paramSignUtil.addParam("eventNo", "2222222", true);
        paramSignUtil.genParam();
        String s = paramSignUtil.signParam("secret");
        System.out.println(s);
    }
    public void setApi(String api) {
        this.api = api;
    }
    public void setGatewayUrl(String gatewayUrl) {
        this.gatewayUrl = gatewayUrl;
    }
    public void addParam(Map<String, Object> params) throws Exception {
        if (params != null) {
            params.remove("sign");
            paramMap.put("api", params.get("api").toString());
            paramMap.put("v", params.get("v").toString());
            paramMap.put("timestamp", params.get("timestamp").toString());
            paramMap.put("param", params.get("param").toString());
            paramMap.put("appKey", params.get("appKey").toString());
        } else {
            return;
        }
    }
    /**
     * sign 签名生成  (   md5(secret + params拼接字符串 + secret)   )
     *
     * @return
     */
    public String signParam(String secret) {
        Iterator<Map.Entry<String, String>> iterator = paramMap.entrySet().iterator();
        StringBuilder builder = new StringBuilder();
        builder.append(secret);
        while (iterator.hasNext()) {
            Map.Entry<String, String> next = iterator.next();
            String key = next.getKey();
            String value = next.getValue();
            builder.append(key);
            builder.append(value);
        }
        builder.append(secret);
        try {
            return MD5.hash(builder.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * http请求 参数拼接
     *
     * @return
     * @throws Exception
     */
    public String genParam() throws Exception {
        Iterator<Map.Entry<String, String>> iterator = paramMap.entrySet().iterator();
        StringBuilder builder = new StringBuilder();
        while (iterator.hasNext()) {
            Map.Entry<String, String> next = iterator.next();
            String key = next.getKey();
            String value = next.getValue();
            if (value == null) {
                throw new Exception("参数错误:参数" + key + "值为空.");
            }
            if (builder.length() == 0) {
                builder.append("?");
            } else {
                builder.append("&");
            }
            builder.append(key);
            builder.append("=");
            builder.append(URLEncoder.encode(value, "UTF-8"));
        }
        return builder.toString();
    }
    //TODO 获取应用token
    public String getToken() {
        return null;
    }
    public void setToken(String token) {
        this.token = token;
    }
    private void addParam(String paramName, String paramValue, boolean bMust) throws Exception {
        if (StringUtil.isEmpty(paramValue)) {
            if (bMust) {
                throw new Exception(paramName + "参数不能为空.");
            } else {
                return;
            }
        }
        String encodeValue = URLEncoder.encode(paramValue, "UTF-8");
        paramMap.put(paramName, encodeValue);
    }
    /**
     * 获取 ISO 8601格式的时间戳
     *
     * @return
     */
    private String getTimestamp() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSZ");
        timestamp = format.format(new Date());
        return timestamp;
    }
}

+ 0 - 23
hos-camel/src/main/java/gateway/route/GatewayRouterBuilder.java

@ -1,23 +0,0 @@
package gateway.route;
import gateway.processor.GatewayProcessor;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/3/13.
 */
@Component
public class GatewayRouterBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9999/api").routeId("mock:collect")
                .process(new GatewayProcessor())
                .routingSlip(method(GatewayProcessor.class, "secret"))
                .routingSlip(method(GatewayProcessor.class, "route"));
    }
}

+ 0 - 16
hos-camel/src/main/java/proxy/route/ProxyRouteBuilder.java

@ -1,16 +0,0 @@
package proxy.route;
import org.apache.camel.builder.RouteBuilder;
/**
 * @author Airhead
 * @since 2017/3/10.
 */
public class ProxyRouteBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9999?matchOnUriPrefix=true").routeId("proxy")
                .noStreamCaching()
                .to("jetty:http://192.168.1.221:10000?bridgeEndpoint=true&throwExceptionOnFailure=false");
    }
}

+ 5 - 0
hos-camel2/pom.xml

@ -76,6 +76,11 @@
            <artifactId>activemq-core</artifactId>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
        </dependency>
    </dependencies>
</project>

+ 0 - 13
hos-camel2/src/main/java/api1/route/ApiRouteBulider.java

@ -1,13 +0,0 @@
package api1.route;
import api1.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v7").routeId("api1")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 0 - 13
hos-camel2/src/main/java/api7/route/ApiRouteBulider.java

@ -1,13 +0,0 @@
package api7.route;
import api7.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v1").routeId("api7")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 1 - 1
hos-camel2/src/main/java/api1/processor/ApiProcessor.java

@ -1,4 +1,4 @@
package api1.processor;
package camel.api1.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;

+ 3 - 3
hos-camel/src/main/java/api2/route/ApiRouteBulider.java

@ -1,13 +1,13 @@
package api2.route;
package camel.api1.route;
import api2.processor.ApiProcessor;
import camel.api1.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v2").routeId("api2")
        from("jetty:http://0.0.0.0:9097/api/v7").routeId("camel/api1")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 1 - 1
hos-camel2/src/main/java/api7/processor/ApiProcessor.java

@ -1,4 +1,4 @@
package api7.processor;
package camel.api7.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;

+ 3 - 3
hos-camel/src/main/java/api3/route/ApiRouteBulider.java

@ -1,13 +1,13 @@
package api3.route;
package camel.api7.route;
import api3.processor.ApiProcessor;
import camel.api7.processor.ApiProcessor;
import org.apache.camel.builder.RouteBuilder;
public class ApiRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http://0.0.0.0:9097/api/v3").routeId("api3")
        from("jetty:http://0.0.0.0:9097/api/v1").routeId("camel/api7")
                .process(new ApiProcessor()).log("servers: 0,code: ,order: 0").log("servers: 0,code: ,order: 0");
    }
}

+ 1 - 1
hos-camel/src/main/java/collect/processor/CollectProcessor0.java

@ -1,4 +1,4 @@
package collect.processor;
package camel.collect.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;

+ 3 - 3
hos-camel/src/main/java/collect/route/CollectQuartzRoute.java

@ -1,12 +1,12 @@
package collect.route;
package camel.collect.route;
import collect.processor.CollectProcessor0;
import camel.collect.processor.CollectProcessor0;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
public class CollectQuartzRoute extends RouteBuilder {
    public void configure() throws Exception {
        from("quartz://myGroup/myTimerName?cron=0/3 * * * * ?").routeId("routeId").process(new CollectProcessor0())
                .setHeader(Exchange.HTTP_METHOD, constant("POST")).to("http4://localhost:8088/crawler/collect").to("stream:out");
                .setHeader(Exchange.HTTP_METHOD, constant("POST")).to("http4://localhost:8088/camel.crawler/camel.collect").to("stream:out");
    }
}

+ 1 - 1
hos-camel/src/main/java/com/yihu/hos/broker/util/Aggregate.java

@ -1,4 +1,4 @@
package com.yihu.hos.broker.util;
package camel.crawler.processor;
import org.apache.camel.Exchange;
import org.apache.camel.processor.aggregate.AggregationStrategy;

+ 1 - 1
hos-broker/src/main/java/com/yihu/hos/broker/common/processor/AggregateProcessor.java

@ -1,4 +1,4 @@
package com.yihu.hos.broker.common.processor;
package camel.crawler.processor;
import net.sf.json.JSONObject;
import org.apache.camel.Exchange;

+ 1 - 1
hos-camel/src/main/java/com/yihu/hos/broker/common/processor/DefaultHttpProcessor.java

@ -1,4 +1,4 @@
package com.yihu.hos.broker.common.processor;
package camel.crawler.processor;
import com.yihu.hos.core.datatype.StringUtil;
import net.sf.json.JSONObject;

+ 1 - 1
hos-camel/src/main/java/com/yihu/hos/broker/common/processor/HttpProcessor.java

@ -1,4 +1,4 @@
package com.yihu.hos.broker.common.processor;
package camel.crawler.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;

+ 1 - 1
hos-camel/src/main/java/com/yihu/hos/broker/util/Split.java

@ -1,4 +1,4 @@
package com.yihu.hos.broker.util;
package camel.crawler.processor;
import net.sf.json.JSONArray;
import org.apache.camel.Body;

+ 3 - 3
hos-camel/src/main/java/crawler/route/CrawlerQuartzRoute.java

@ -1,6 +1,6 @@
package crawler.route;
package camel.crawler.route;
import com.yihu.hos.broker.common.processor.DefaultHttpProcessor;
import camel.crawler.processor.DefaultHttpProcessor;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
@ -10,6 +10,6 @@ import org.apache.camel.builder.RouteBuilder;
public class CrawlerQuartzRoute extends RouteBuilder {
    public void configure() throws Exception {
        from("quartz://myGroup/myTimerName?cron=0/3 * * * * ?").routeId("routeId").process(new DefaultHttpProcessor("{\"jobId\": \"sfsfsgafcas\"}"))
                .setHeader(Exchange.HTTP_METHOD, constant("POST")).to("http4://localhost:8088/crawler/patientList").to("stream:out");
                .setHeader(Exchange.HTTP_METHOD, constant("POST")).to("http4://localhost:8088/camel.crawler/patientList").to("stream:out");
    }
}

+ 6 - 6
hos-camel/src/main/java/crawler/route/CrawlerRouteBulider.java

@ -1,6 +1,6 @@
package crawler.route;
package camel.crawler.route;
import com.yihu.hos.broker.common.processor.DefaultHttpProcessor;
import camel.crawler.processor.DefaultHttpProcessor;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
@ -14,18 +14,18 @@ public class CrawlerRouteBulider extends RouteBuilder {
        from("jetty:http://192.168.131.96:8066/crawlerPull").routeId("crawlerPull")
                .process(new DefaultHttpProcessor("{\"jobId\":\"5ad5c11655d443c30155d477a6b10000\"}")).setHeader(Exchange.HTTP_METHOD, constant("POST"))
                .to("http://192.168.131.96:8088/crawler/patientList");
                .to("http://192.168.131.96:8088/camel.crawler/patientList");
        from("jetty:http://192.168.131.96:8066/crawlerPush").routeId("crawlerPush")
                .process(new DefaultHttpProcessor("{\"jobId\":\"5ad5c11655d443c30155d477a6b10000\"}")).setHeader(Exchange.HTTP_METHOD, constant("POST"))
                .to("http://192.168.131.96:8088/crawler/patient");
                .to("http://192.168.131.96:8088/camel.crawler/patient");
        from("jetty:http://192.168.131.96:8066/crawlerFlowPull").routeId("crawlerFlowPull")
                .process(new DefaultHttpProcessor("{\"jobId\":\"5ad5c11655d443c30155d477a6b10000\"}")).setHeader(Exchange.HTTP_METHOD, constant("POST"))
                .to("http://192.168.131.96:8088/crawler/patientListFlow");
                .to("http://192.168.131.96:8088/camel.crawler/patientListFlow");
        from("jetty:http://192.168.131.96:8066/crawlerFlowPush").routeId("crawlerFlowPush")
                .process(new DefaultHttpProcessor("{\"jobId\":\"5ad5c11655d443c30155d477a6b10000\"}")).setHeader(Exchange.HTTP_METHOD, constant("POST"))
                .to("http://192.168.131.96:8088/crawler/patientFlow");
                .to("http://192.168.131.96:8088/camel.crawler/patientFlow");
    }
}

+ 2 - 2
hos-camel/src/main/java/crawler/route/QuartzRoute.java

@ -1,6 +1,6 @@
package crawler.route;
package camel.crawler.route;
import com.yihu.hos.broker.common.processor.DefaultHttpProcessor;
import camel.crawler.processor.DefaultHttpProcessor;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;

+ 5 - 5
hos-camel/src/main/java/crawler/route/RouteBulider1.java

@ -1,9 +1,9 @@
package crawler.route;
package camel.crawler.route;
import com.yihu.hos.broker.util.Aggregate;
import com.yihu.hos.broker.common.processor.HttpProcessor;
import com.yihu.hos.broker.util.Split;
import com.yihu.hos.broker.common.processor.AggregateProcessor;
import camel.crawler.processor.Aggregate;
import camel.crawler.processor.AggregateProcessor;
import camel.crawler.processor.HttpProcessor;
import camel.crawler.processor.Split;
import org.apache.camel.builder.RouteBuilder;
/**

+ 1 - 1
hos-camel2/src/main/java/camel/gateway/processor/ParamVerifyBean.java

@ -29,7 +29,7 @@ public class ParamVerifyBean {
//    public static void main(String[] args) throws Exception {
//        ParamVerifyBean paramSignUtil = new ParamVerifyBean();
//        paramSignUtil.setApi("collect");
//        paramSignUtil.setApi("camel.collect");
//        paramSignUtil.addParam("patientId", "11111", true);
//        paramSignUtil.addParam("eventNo", "2222222", true);
//        paramSignUtil.genParam();

+ 21 - 3
hos-camel2/src/main/java/camel/gateway/route/GatewayRouterBuilder.java

@ -5,6 +5,8 @@ import camel.gateway.processor.GatewayProcessor;
import camel.gateway.processor.SignProcessor;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.processor.interceptor.DefaultTraceFormatter;
import org.apache.camel.processor.interceptor.Tracer;
import org.springframework.stereotype.Component;
/**
@ -17,8 +19,24 @@ public class GatewayRouterBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        this.getContext().setUseMDCLogging(true);
        this.getContext().setTracing(true);
        Tracer tracer = new Tracer();
        DefaultTraceFormatter formatter = new DefaultTraceFormatter();
        formatter.setShowHeaders(true);
        formatter.setShowBody(true);
        formatter.setShowBodyType(true);
        formatter.setShowOutHeaders(true);
        formatter.setShowOutBody(true);
        formatter.setShowOutBodyType(true);
        tracer.setFormatter(formatter);
        this.getContext().getProperties().put(Exchange.LOG_DEBUG_BODY_STREAMS, "true");
        from("jetty:http://0.0.0.0:9998?matchOnUriPrefix=true").routeId("proxy")
                .to("jetty:http://127.0.0.1:10000?bridgeEndpoint=true&throwExceptionOnFailure=false");
                .to("jetty:http://192.168.1.221:10000?bridgeEndpoint=true&throwExceptionOnFailure=false");
        from("jetty:http://0.0.0.0:9999/api").routeId("api")
                .log(body().toString())
@ -38,10 +56,10 @@ public class GatewayRouterBuilder extends RouteBuilder {
                .log("=========================心跳测试=====================");
        from("jetty:http://0.0.0.0:9999/sign").routeId("sign")
        .process(new SignProcessor());
                .process(new SignProcessor());
        from("jetty:http://0.0.0.0:9999/rest").routeId("restTest")
        .to("restlet:http://192.168.1.221:10000/api/v1.0/admin/doctors/admin/13?autoCloseStream=true");
                .to("restlet:http://192.168.1.221:10000/api/v1.0/admin/doctors/admin/13?autoCloseStream=true");
    }
}

+ 24 - 0
hos-camel2/src/main/java/camel/log/JmsAppender.java

@ -0,0 +1,24 @@
package camel.log;
import ch.qos.logback.classic.net.JMSQueueAppender;
import ch.qos.logback.classic.net.JMSTopicAppender;
import ch.qos.logback.classic.spi.ILoggingEvent;
import java.util.Map;
/**
 * Created by l4qiang on 2017-04-12.
 */
public class JmsAppender extends JMSTopicAppender {
    @Override
    public void append(ILoggingEvent event) {
        Map<String, String> mdcPropertyMap = event.getMDCPropertyMap();
        if (mdcPropertyMap.size() == 0)
        {
            return;
        }
        System.out.println(mdcPropertyMap);
        System.out.println(event.getMessage());
        super.append(event);
    }
}

+ 2 - 2
hos-camel/src/main/java/qlc/processor/Processor0.java

@ -1,4 +1,4 @@
package qlc.processor;
package camel.qlc.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
@ -12,7 +12,7 @@ public class Processor0 implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message outMessage = exchange.getOut();
        HttpMessage inMessage = (HttpMessage) exchange.getIn();
        String queryString = "api=qlc&param="+inMessage.getRequest().getParameterValues("data")[0];
        String queryString = "api=camel.qlc&param="+inMessage.getRequest().getParameterValues("data")[0];
        outMessage.setHeader(Exchange.HTTP_QUERY, queryString);
    }

+ 1 - 1
hos-camel/src/main/java/qlc/processor/Processor1.java

@ -1,4 +1,4 @@
package qlc.processor;
package camel.qlc.processor;
import org.apache.camel.Exchange;
import org.apache.camel.Message;

+ 1 - 1
hos-camel/src/main/java/qlc/processor/Processor2.java

@ -1,4 +1,4 @@
package qlc.processor;
package camel.qlc.processor;
import net.sf.json.JSONObject;
import org.apache.camel.Exchange;

+ 6 - 7
hos-camel/src/main/java/qlc/route/QlcRouteBulider.java

@ -1,10 +1,9 @@
package qlc.route;
package camel.qlc.route;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
import qlc.processor.Processor1;
import qlc.processor.Processor2;
import camel.qlc.processor.Processor1;
import camel.qlc.processor.Processor2;
/**
 * Created by lingfeng on 2016/7/25.
@ -13,11 +12,11 @@ public class QlcRouteBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jetty:http4://172.17.110.178:9088/qlc").routeId("qlc")
        from("jetty:http4://172.17.110.178:9088/camel.qlc").routeId("camel/qlc")
                .process(new Processor1()).setHeader(Exchange.HTTP_METHOD, constant("POST")).log("servers: 3,code: queryUserInfo,order: 1")
                .to("http4://172.19.103.89:8088/api/v1.0/qlc/queryUserInfo").log("servers: 3,code: queryUserInfo,order: 1")
                .to("http4://172.19.103.89:8088/api/v1.0/camel.qlc/queryUserInfo").log("servers: 3,code: queryUserInfo,order: 1")
                .process(new Processor2()).setHeader(Exchange.HTTP_METHOD, constant("POST")).log("servers: 3,code: patientInformation,order: 1")
                .to("http4://172.19.103.89:8088/api/v1.0/qlc/patientInformation").log("servers: 3,code: patientInformation,order: 1")
                .to("http4://172.19.103.89:8088/api/v1.0/camel.qlc/patientInformation").log("servers: 3,code: patientInformation,order: 1")
                .process(new Processor2()).setHeader(Exchange.HTTP_METHOD, constant("POST")).to("stream:out"); // 2. 为路由配置组件或终端节点.
    }
}

+ 8 - 0
hos-camel2/src/main/resources/jndi.properties

@ -0,0 +1,8 @@
connectionFactoryNames = ConnectionFactory
# register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
#queue.logback-queue = business.log.queue
# queue.[jndiName] = [physicalName]
topic.logback-queue = business.log.queue

+ 37 - 0
hos-camel2/src/main/resources/logback.xml

@ -0,0 +1,37 @@
<configuration>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%date [%thread] %-5level %logger{25} - %msg%n</Pattern>
        </layout>
    </appender>
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <file>logs/main.log</file>
        <append>true</append>
        <encoder>
            <Pattern>%date [%thread] %-5level %logger{25} - %msg%n</Pattern>
        </encoder>
    </appender>
    <appender name="queue" class="camel.log.JmsAppender">
        <InitialContextFactoryName>
            org.apache.activemq.jndi.ActiveMQInitialContextFactory
        </InitialContextFactoryName>
        <ProviderURL>tcp://172.19.103.57:61616</ProviderURL>
        <userName>admin</userName>
        <password>admin</password>
        <TopicConnectionFactoryBindingName>ConnectionFactory</TopicConnectionFactoryBindingName>
        <TopicBindingName>logback-queue</TopicBindingName>
    </appender>
    <logger name="org.apache.camel" level="INFO" additivity="false">
        <appender-ref ref="queue"/>
    </logger>
    <!--<appender-ref ref="console" />-->
    <!--</logger>-->
    <root level="INFO">
        <!--<appender-ref ref="queue" />-->
        <appender-ref ref="console" />
    </root>
</configuration>

+ 10 - 1
hos-parent/pom.xml

@ -32,7 +32,7 @@
        <deltaspike-version>1.7.2</deltaspike-version>
        <hystrix-version>1.5.9</hystrix-version>
        <jackson-version>2.8.5</jackson-version>
        <javax-mail-version>1.5.5</javax-mail-version>
        <jolokia-version>1.3.5</jolokia-version>
        <jetty-plugin-version>8.1.17.v20150415</jetty-plugin-version>
@ -40,6 +40,9 @@
        <junit-version>4.12</junit-version>
        <karaf-version>4.0.8</karaf-version>
        <jackson-version>2.8.5</jackson-version>
        <json-lib-version>2.4</json-lib-version>
        <slf4j-version>1.7.21</slf4j-version>
        <!-- TODO need to update to 3.2.0 for everything like in chapter19/hawtio-custom-plugin -->
@ -468,6 +471,12 @@
                <artifactId>jsch</artifactId>
                <version>${jsch-version}</version>
            </dependency>
            <dependency>
                <groupId>net.sf.json-lib</groupId>
                <artifactId>json-lib</artifactId>
                <version>${json-lib-version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>