Browse Source

Merge branch 'master' of http://192.168.1.220:10080/esb/esb

huangzhiyong 8 years ago
parent
commit
f3040ac911

+ 36 - 8
hos-broker/src/main/java/com/yihu/hos/broker/common/log/TracerFormatter.java

@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.processor.interceptor.DefaultTraceFormatter;
import org.apache.camel.processor.interceptor.TraceInterceptor;
@ -19,18 +20,45 @@ public class TracerFormatter extends DefaultTraceFormatter {
    public Object format(TraceInterceptor interceptor, ProcessorDefinition<?> node, Exchange exchange) {
        System.out.println(exchange.getIn().getBody());
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            ObjectNode objectNode = objectMapper.createObjectNode();
            Map<String, Object> headers = exchange.getIn().getHeaders();
            headers.forEach((key, value) -> {
                if (value == null) {
                    return;
            ObjectNode rootNode = objectMapper.createObjectNode();
            {
                Message in = exchange.getIn();
                ObjectNode inNode = rootNode.with("in");
                Map<String, Object> headers = in.getHeaders();
                headers.forEach((key, value) -> {
                    if (value == null) {
                        return;
                    }
                    inNode.put(key, value.toString());
                });
                if (in.getBody() != null) {
                    inNode.put("body", in.getBody(String.class));
                }
            }
                objectNode.put(key, value.toString());
            });
            {
                ObjectNode outNode = rootNode.with("out");
                Message out = exchange.getOut();
                Map<String, Object> headers = out.getHeaders();
                headers.forEach((key, value) -> {
                    if (value == null) {
                        return;
                    }
                    outNode.put(key, value.toString());
                });
                if (out.getBody() != null) {
                    outNode.put("body", out.getBody(String.class));
                }
            }
            return objectMapper.writeValueAsString(objectNode);
            return objectMapper.writeValueAsString(rootNode);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

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

@ -41,6 +41,8 @@ public class CamelStartBoot {
            context.setUseMDCLogging(true);
            Tracer tracer = new Tracer();
            tracer.setTraceOutExchanges(true);
            DefaultTraceFormatter formatter = new TracerFormatter();
            formatter.setShowHeaders(true);
            formatter.setShowBody(true);
@ -49,6 +51,7 @@ public class CamelStartBoot {
            formatter.setShowOutBody(true);
            formatter.setShowOutBodyType(true);
            tracer.setFormatter(formatter);
            context.addInterceptStrategy(tracer);
            context.setTracing(true);

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

@ -15,7 +15,6 @@ public class JmsAppender extends JMSTopicAppender {
        if (mdcPropertyMap.size() == 0) {
            return;
        }
        System.out.println(mdcPropertyMap);
        System.out.println(event.getMessage());
        super.append(event);
    }

+ 36 - 10
hos-camel2/src/main/java/camel/log/TracerFormatter.java

@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.processor.interceptor.DefaultTraceFormatter;
import org.apache.camel.processor.interceptor.TraceInterceptor;
@ -16,21 +17,46 @@ import java.util.Map;
public class TracerFormatter extends DefaultTraceFormatter {
    @Override
    public Object format(TraceInterceptor interceptor, ProcessorDefinition<?> node, Exchange exchange) {
        System.out.println(exchange.getIn().getBody());
        ObjectMapper objectMapper = new ObjectMapper();
        try {
//            return objectMapper.writeValueAsString(exchange.getIn().getHeaders());
            ObjectNode objectNode = objectMapper.createObjectNode();
            Map<String, Object> headers = exchange.getIn().getHeaders();
            headers.forEach((key, value) -> {
                if (value == null) {
                    return;
            ObjectNode rootNode = objectMapper.createObjectNode();
            {
                Message in = exchange.getIn();
                ObjectNode inNode = rootNode.with("in");
                Map<String, Object> headers = in.getHeaders();
                headers.forEach((key, value) -> {
                    if (value == null) {
                        return;
                    }
                    inNode.put(key, value.toString());
                });
                if (in.getBody() != null) {
                    inNode.put("body", in.getBody(String.class));
                }
            }
                objectNode.put(key, value.toString());
            });
            {
                ObjectNode outNode = rootNode.with("out");
                Message out = exchange.getOut();
                Map<String, Object> headers = out.getHeaders();
                headers.forEach((key, value) -> {
                    if (value == null) {
                        return;
                    }
                    outNode.put(key, value.toString());
                });
                if (out.getBody() != null) {
                    outNode.put("body", out.getBody(String.class));
                }
            }
            return objectMapper.writeValueAsString(objectNode);
            return objectMapper.writeValueAsString(rootNode);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

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

@ -17,7 +17,7 @@
        <InitialContextFactoryName>
            org.apache.activemq.jndi.ActiveMQInitialContextFactory
        </InitialContextFactoryName>
        <ProviderURL>tcp://172.19.103.57:61616</ProviderURL>
        <ProviderURL>tcp://172.19.103.42:61616</ProviderURL>
        <userName>admin</userName>
        <password>admin</password>
        <TopicConnectionFactoryBindingName>ConnectionFactory</TopicConnectionFactoryBindingName>

+ 3 - 2
hos-logger/src/main/java/com/yihu/hos/logger/camel/aggregator/EHRLogAggregator.java

@ -1,5 +1,6 @@
package com.yihu.hos.logger.camel.aggregator;
import ch.qos.logback.classic.spi.ILoggingEvent;
import org.apache.camel.Exchange;
import org.apache.camel.processor.aggregate.AggregationStrategy;
@ -12,9 +13,9 @@ public class EHRLogAggregator implements AggregationStrategy {
    @Override
    public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
        Object newBody = newExchange.getIn().getBody();
        ArrayList<Object> list = null;
        ArrayList<Object> list;
        if (oldExchange == null) {
            list = new ArrayList<Object>();
            list = new ArrayList<>();
            list.add(newBody);
            newExchange.getIn().setBody(list);
            return newExchange;

+ 3 - 2
hos-logger/src/main/java/com/yihu/hos/logger/camel/expression/EHRLogExpression.java

@ -6,7 +6,8 @@ import ch.qos.logback.classic.spi.ILoggingEvent;
 * Created by l4qiang on 2017-04-14.
 */
public class EHRLogExpression {
    public String getBreadcrumbId(ILoggingEvent event){
        return event.getMDCPropertyMap().get("camel.breadcrumbId");
    public String getBreadcrumbId(ILoggingEvent event) {
        String routeId = event.getMDCPropertyMap().get("camel.routeId").substring(0, 2);
        return routeId + "#" + event.getMDCPropertyMap().get("camel.breadcrumbId");
    }
}

+ 43 - 19
hos-logger/src/main/java/com/yihu/hos/logger/camel/processor/EHRLogProcesser.java

@ -10,6 +10,7 @@ import org.apache.camel.Processor;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Map;
/**
 * ehr log处理
@ -21,45 +22,68 @@ public class EHRLogProcesser implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        exchange.getOut().setBody("");
        exchange.getOut().setHeader("empty", true);
        ArrayList arrayList = exchange.getIn().getBody(ArrayList.class);
        if (arrayList.size() != 3) {
        if (arrayList.size() != 4) {
            return;
        }
        Object first = arrayList.get(0);
        Object last = arrayList.get(2);
        Object last = arrayList.get(arrayList.size() - 1);
        try {
            ILoggingEvent firstEvent = (ILoggingEvent) first;
            ILoggingEvent lastEvent = (ILoggingEvent) last;
            ILoggingEvent request = (ILoggingEvent) first;
            ILoggingEvent response = (ILoggingEvent) last;
            Map<String, String> mdcPropertyMap = request.getMDCPropertyMap();
            if (mdcPropertyMap == null || !mdcPropertyMap.get("camel.routeId").equals("api")) {
                return;
            }
            ObjectMapper objectMapper = new ObjectMapper();
            JsonNode jsonNode = objectMapper.readValue(firstEvent.getMessage(), JsonNode.class);
            JsonNode requestNode = objectMapper.readValue(request.getMessage(), JsonNode.class);
            JsonNode responseNode = objectMapper.readValue(response.getMessage(), JsonNode.class);
            JsonNode inNode = requestNode.with("in");
            JsonNode outNode = responseNode.with("out");
            ObjectNode objectNode = objectMapper.createObjectNode();
            objectNode.put("time", new Timestamp(firstEvent.getTimeStamp()).toString());
            objectNode.put("time", new Timestamp(request.getTimeStamp()).toString());
            objectNode.put("logType", 1);
            objectNode.put("caller", jsonNode.get("appKey").asText());
            objectNode.put("caller", inNode.get("appKey").asText());
            ObjectNode dataNode = objectMapper.createObjectNode();
            dataNode.put("responseTime", lastEvent.getTimeStamp() - firstEvent.getTimeStamp());
            dataNode.put("url", jsonNode.get("CamelHttpUrl").asText());
            dataNode.put("responseTime", response.getTimeStamp() - request.getTimeStamp());
            dataNode.put("url", inNode.get("CamelHttpUrl").asText());
            dataNode.put("responseCode", outNode.get("CamelHttpResponseCode").asText());
            dataNode.put("response", outNode.get("body").asText());
            dataNode.put("api", inNode.get("api").asText());
            dataNode.put("appKey", inNode.get("appKey").asText());
            ObjectNode paramNode = objectMapper.createObjectNode();
            paramNode.put("api", jsonNode.get("api").asText());
            paramNode.put("appKey", jsonNode.get("appKey").asText());
            paramNode.put("sign", jsonNode.get("sign").asText());
            paramNode.put("timestamp", jsonNode.get("timestamp").asText());
            paramNode.put("v", jsonNode.get("v").asText());
            if (jsonNode.has("param")) {
                paramNode.put("param", jsonNode.get("param").asText());
            paramNode.put("api", inNode.get("api").asText());
            paramNode.put("appKey", inNode.get("appKey").asText());
            paramNode.put("sign", inNode.get("sign").asText());
            paramNode.put("timestamp", inNode.get("timestamp").asText());
            paramNode.put("v", inNode.get("v").asText());
            if (inNode.has("param")) {
                paramNode.put("param", inNode.get("param").asText());
            }
            if (jsonNode.has("token")) {
                paramNode.put("token", jsonNode.get("token").asText());
            if (inNode.has("token")) {
                paramNode.put("token", inNode.get("token").asText());
            }
            dataNode.set("params", paramNode);
            objectNode.set("data", dataNode);
            String content = objectMapper.writeValueAsString(objectNode);
            exchange.getOut().setBody(content);
        } catch (JsonParseException e) {
            exchange.getOut().setHeader("empty", false);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

+ 5 - 2
hos-logger/src/main/java/com/yihu/hos/logger/camel/route/EHRLogRouterBuilder.java

@ -33,8 +33,11 @@ public class EHRLogRouterBuilder extends RouteBuilder {
        context.addComponent(DESTINATION_NAME, JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
        from(DESTINATION_NAME + ":topic:" + QUEUE_NAME)
                .aggregate(method(new EHRLogExpression(), "getBreadcrumbId"), new EHRLogAggregator())
                .completionSize(3)
                .completionSize(4)
                .completionTimeout(20 * 1000)
                .process(new EHRLogProcesser())
                .to("file://" + loggerConfiguration.getEhrLogDir());
                .choice()
                .when(header("empty").isNotEqualTo(true)).to("file://" + loggerConfiguration.getEhrLogDir())
                .endChoice();
    }
}

+ 9 - 0
hos-logger/src/main/java/com/yihu/hos/logger/model/HosLog.java

@ -16,6 +16,7 @@ public class HosLog {
    private String id;
    @Indexed
    private String exchangeId;
    private String messageId;
    private String correlationId;
    private String transactionKey;
    @Indexed
@ -56,6 +57,14 @@ public class HosLog {
        this.exchangeId = exchangeId;
    }
    public String messageId() {
        return this.messageId;
    }
    public void setMessageId(String messageId) {
        this.messageId = messageId;
    }
    public String getCorrelationId() {
        return correlationId;
    }

+ 2 - 0
hos-logger/src/main/java/com/yihu/hos/logger/service/HosLogService.java

@ -39,6 +39,8 @@ public class HosLogService {
        hosLog.setFireTime(new Date(event.getTimeStamp()));
        hosLog.setExchangeId(mdcPropertyMap.get("camel.exchangeId"));
        hosLog.setMessageId(mdcPropertyMap.get("camel.messageId"));
        hosLog.setCorrelationId(mdcPropertyMap.get("camel.correlationId"));
        hosLog.setTransactionKey(mdcPropertyMap.get("camel.transactionKey"));
        hosLog.setRouteId(mdcPropertyMap.get("camel.routeId"));
        hosLog.setBreadcrumbId(mdcPropertyMap.get("camel.breadcrumbId"));

+ 1 - 1
hos-logger/src/main/resources/application.yml

@ -16,7 +16,7 @@ camel:
spring:
  profiles: dev
  activemq:
      broker-url: tcp://172.19.103.57:61616
      broker-url: tcp://172.19.103.42:61616
      user: admin
      password: admin
  data: