Browse Source

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

demon 8 years ago
parent
commit
c97801be08
22 changed files with 447 additions and 168 deletions
  1. 12 0
      hos-arbiter/ReadMe.md
  2. 9 1
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/models/BrokerServer.java
  3. 18 5
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/models/Endpoint.java
  4. 15 1
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/models/ServiceFlowEvent.java
  5. 30 0
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/EndpointEventRouter.java
  6. 3 3
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ServiceFlowEventRouter.java
  7. 1 0
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/BrokerServerService.java
  8. 51 3
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/EndpointService.java
  9. 0 115
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ServiceFlowEventService.java
  10. 110 1
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ServiceFlowService.java
  11. 2 6
      hos-broker/pom.xml
  12. 52 0
      hos-broker/src/main/java/com/yihu/hos/common/configuration/MongoConfiguration.java
  13. 78 0
      hos-broker/src/main/java/com/yihu/hos/common/format/PatternLayout.java
  14. 4 3
      hos-broker/src/main/java/com/yihu/hos/common/listener/ApplicationStartListener.java
  15. 21 3
      hos-broker/src/main/java/com/yihu/hos/services/BusinessLogService.java
  16. 9 0
      hos-broker/src/main/resources/application.yml
  17. 1 1
      hos-broker/src/main/resources/jndi.properties
  18. 8 7
      hos-broker/src/main/resources/log4j.properties
  19. 1 1
      hos-core-dependencies/pom.xml
  20. 0 6
      hos-core/src/main/java/com/yihu/hos/core/datatype/ClassFileUtil.java
  21. 13 12
      hos-web-framework-dependencies/pom.xml
  22. 9 0
      sdk/java/hos-client/src/main/java/com/yihu/hos/client/Request.java

+ 12 - 0
hos-arbiter/ReadMe.md

@ -0,0 +1,12 @@
#说明
hos-arbiter的主要功能就是实现服务的发现
* BrokerServer的服务注册与发现,无通知机制(客户端缓存和定时更新机制)
* Endpoint的服务注册与发现,有通知机制,会将服务状态发送给BrokerServer,
以便BrokerServer进行实际的调度策略的实现
* ServiceFlow的服务注册与发现,有通知机制,会将服务状态发送给BrokerServer,
以便BrokerServer实现流程的动态加载与运行。
因为hos-arbiter没有使用zookeeper等相关软件来做事件推送,做了个折中。
尽量使用现有的功能组件来
* 通过ActiveMQ来解耦hos-admin的依赖
* 利用了MongoDB的TTL来做服务的过期
* 直接调用broker进行数据更新

+ 9 - 1
hos-arbiter/src/main/java/com/yihu/hos/arbiter/models/BrokerServer.java

@ -16,7 +16,7 @@ public class BrokerServer {
    private String hostName;
    private String hostAddress;
    private int port;
    private boolean enable;
    @Indexed(name = "updateTime_1", expireAfterSeconds = 30)
    private Date updateTime;
@ -63,4 +63,12 @@ public class BrokerServer {
    public String getURL() {
        return "http://" + hostAddress + ":" + port;
    }
    public boolean isEnable() {
        return enable;
    }
    public void setEnable(boolean enable) {
        this.enable = enable;
    }
}

+ 18 - 5
hos-arbiter/src/main/java/com/yihu/hos/arbiter/models/Endpoint.java

@ -1,18 +1,23 @@
package com.yihu.hos.arbiter.models;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
/**
 * @created Airhead 2016/7/27.
 */
@Document
public class Endpoint {
    @Id
    private String id;
    private String serviceName;
    private String endpoint;
    private Date updatTime;
    @Indexed(name = "updateTime_1", expireAfterSeconds = 30)
    private Date updateTime;
    private String event;
    public String getId() {
        return id;
@ -38,11 +43,19 @@ public class Endpoint {
        this.endpoint = endpoint;
    }
    public Date getUpdatTime() {
        return updatTime;
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdatTime(Date updatTime) {
        this.updatTime = updatTime;
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public String getEvent() {
        return event;
    }
    public void setEvent(String event) {
        this.event = event;
    }
}

+ 15 - 1
hos-arbiter/src/main/java/com/yihu/hos/arbiter/models/ServiceFlowEvent.java

@ -1,14 +1,20 @@
package com.yihu.hos.arbiter.models;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
/**
 * @created Airhead 2016/8/4.
 */
public class ServiceFlowEvent {
@Document
public class ServiceFlow {
    private String event;
    private String serviceFlow;
    private String packageName;
    private String className;
    private String path;
    private Date updateTime;
    public String getEvent() {
        return event;
@ -49,4 +55,12 @@ public class ServiceFlowEvent {
    public void setPath(String path) {
        this.path = path;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}

+ 30 - 0
hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/EndpointEventRouter.java

@ -0,0 +1,30 @@
package com.yihu.hos.arbiter.routers;
import com.yihu.hos.arbiter.configuration.ActivemqConfiguration;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.model.ModelCamelContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.jms.ConnectionFactory;
/**
 * @created Airhead 2016/8/1.
 */
@Component
public class EndpointEventRouter extends RouteBuilder {
    @Autowired
    private ActivemqConfiguration activemqConfiguration;
    @Override
    public void configure() throws Exception {
        ModelCamelContext context = this.getContext();
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                activemqConfiguration.getUser(), activemqConfiguration.getPassword(),activemqConfiguration.getBrokerURL());
        // Note we can explicit name the component
        context.addComponent("service-event", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
        from("service-event:queue:configuration.endpoint")
                .to("bean:endpointService?method=trigger"); //TODO:这边可以做Message Filter,减化trigger逻辑
    }
}

+ 3 - 3
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ServiceFlowEventRouter.java

@ -1,4 +1,4 @@
package com.yihu.hos.arbiter.services;
package com.yihu.hos.arbiter.routers;
import com.yihu.hos.arbiter.configuration.ActivemqConfiguration;
import org.apache.activemq.ActiveMQConnectionFactory;
@ -24,7 +24,7 @@ public class ServiceFlowEventRouter extends RouteBuilder {
                activemqConfiguration.getUser(), activemqConfiguration.getPassword(),activemqConfiguration.getBrokerURL());
        // Note we can explicit name the component
        context.addComponent("service-event", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
        from("service-event:queue:configuration.queue")
                .to("bean:serviceFlowEventService?method=trigger"); //TODO:这边可以做Message Filter,减化trigger逻辑
        from("service-event:queue:configuration.service.flow")
                .to("bean:serviceFlowService?method=trigger"); //TODO:这边可以做Message Filter,减化trigger逻辑
    }
}

+ 1 - 0
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/BrokerServerService.java

@ -42,6 +42,7 @@ public class BrokerServerService {
     */
    public BrokerServer get() {
        Query query = new Query();
        query.addCriteria(Criteria.where("enable").is(true));
        query.with(new Sort(new Sort.Order(Sort.Direction.DESC, "updateTime")));
        return mongoOperations.findOne(query, BrokerServer.class);
    }

+ 51 - 3
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/EndpointService.java

@ -1,6 +1,10 @@
package com.yihu.hos.arbiter.services;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.arbiter.models.BrokerServer;
import com.yihu.hos.arbiter.models.Endpoint;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@ -8,13 +12,16 @@ import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.io.IOException;
/**
 * @created Airhead 2016/7/27.
 */
@Service
@Service("endpointService")
public class EndpointService {
    private static final Logger logger = LogManager.getLogger(BrokerServerService.class);
    @Autowired
    private BrokerServerService brokerServerService;
    @Autowired
    private MongoOperations mongoOperations;
@ -22,7 +29,48 @@ public class EndpointService {
        mongoOperations.save(endpoint);
    }
    public Endpoint get(String serviceName){
    public Endpoint get(String serviceName) {
        return mongoOperations.findOne(new Query(), Endpoint.class);
    }
    public void update(Endpoint endpoint) {
    }
    public void trigger(String msg) {
        System.out.println(msg);
        BrokerServer brokerServer = brokerServerService.get();
        if (brokerServer == null) {
            logger.trace("can not find a valid broker server.");
            return;
        }
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            Endpoint endpoint = objectMapper.readValue(msg, Endpoint.class);
            CloseableHttpClient httpclient = HttpClients.createDefault();
            switch (endpoint.getEvent()) {
                case "endpointRegister": {
                    this.save(endpoint);
                    break;
                }
                case "endpointOnService": {
                    this.save(endpoint);
                    break;
                }
                case "endpointOffService": {
                    this.update(endpoint);
                    break;
                }
                default:
                    break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

+ 0 - 115
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ServiceFlowEventService.java

@ -1,115 +0,0 @@
package com.yihu.hos.arbiter.services;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.arbiter.models.BrokerServer;
import com.yihu.hos.arbiter.models.ServiceFlowEvent;
import org.apache.http.Consts;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
/**
 * @created Airhead 2016/8/4.
 */
@Service("serviceFlowEventService")
public class ServiceFlowEventService {
    @Autowired
    private BrokerServerService brokerServerService;
    public void trigger(String msg) {
        System.out.println(msg);
        BrokerServer brokerServer = brokerServerService.get();
        if (brokerServer == null) {
            return; //TODO: log
        }
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            ServiceFlowEvent serviceFlowEvent = objectMapper.readValue(msg, ServiceFlowEvent.class);
            List<NameValuePair> nameValuePairList = new ArrayList<>();
            nameValuePairList.add(new BasicNameValuePair("serviceName", serviceFlowEvent.getServiceFlow()));
            nameValuePairList.add(new BasicNameValuePair("packageName", serviceFlowEvent.getPackageName()));
            nameValuePairList.add(new BasicNameValuePair("className", serviceFlowEvent.getClassName()));
            nameValuePairList.add(new BasicNameValuePair("path", serviceFlowEvent.getPath()));
            CloseableHttpClient httpclient = HttpClients.createDefault();
            switch (serviceFlowEvent.getEvent()) {
                case "processorAdded": {
                    HttpPost httpPost = new HttpPost(brokerServer.getURL() + "/esb/processor");
                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList, Consts.UTF_8));
                    CloseableHttpResponse response = httpclient.execute(httpPost);
                    response.close();
                    break;
                }
                case "processorDataChanged": {
                    HttpPut httpPut = new HttpPut(brokerServer.getURL() + "/esb/processor");
                    httpPut.setEntity(new UrlEncodedFormEntity(nameValuePairList, Consts.UTF_8));
                    CloseableHttpResponse response = httpclient.execute(httpPut);
                    response.close();
                    break;
                }
                case "routeDefineAdded": {
                    HttpPost httpPost = new HttpPost(brokerServer.getURL() + "/esb/processor");
                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList, Consts.UTF_8));
                    CloseableHttpResponse response = httpclient.execute(httpPost);
                    response.close();
                    break;
                }
                case "routeDefineChanged": {
                    HttpPut httpPut = new HttpPut(brokerServer.getURL() + "/esb/route");
                    httpPut.setEntity(new UrlEncodedFormEntity(nameValuePairList, Consts.UTF_8));
                    CloseableHttpResponse response = httpclient.execute(httpPut);
                    response.close();
                    break;
                }
                case "routeDefineDelete": {
                    try {
                        URI uri = new URIBuilder()
                                .setScheme("http")
                                .setHost(brokerServer.getHostAddress() + ":" + brokerServer.getPort())
                                .setPath("/route")
                                .setParameter("serviceName", serviceFlowEvent.getServiceFlow())
                                .setParameter("packageName", serviceFlowEvent.getPackageName())
                                .setParameter("className", serviceFlowEvent.getClassName())
                                .setParameter("path", serviceFlowEvent.getPath())
                                .build();
                        HttpDelete httpDelete = new HttpDelete(uri);
                        CloseableHttpResponse response = httpclient.execute(httpDelete);
                        response.close();
                    } catch (URISyntaxException e) {
                        e.printStackTrace();
                    }
                    break;
                }
                default:
                    break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

+ 110 - 1
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ServiceFlowService.java

@ -1,12 +1,38 @@
package com.yihu.hos.arbiter.services;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.arbiter.models.BrokerServer;
import com.yihu.hos.arbiter.models.ServiceFlow;
import org.apache.http.Consts;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
/**
 * @created Airhead 2016/8/16.
 */
@Service
@Service("serviceFlowService")
public class ServiceFlowService {
    private static final Logger logger = LogManager.getLogger(BrokerServerService.class);
    @Autowired
    private BrokerServerService brokerServerService;
    public void save(String serviceFlow) {
    }
@ -18,4 +44,87 @@ public class ServiceFlowService {
    public String put(String serviceName, String ClientInfo) {
        return null;
    }
    public void trigger(String msg) {
        System.out.println(msg);
        BrokerServer brokerServer = brokerServerService.get();
        if (brokerServer == null) {
            logger.trace("can not find a valid broker server.");
            return;
        }
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            ServiceFlow serviceFlow = objectMapper.readValue(msg, ServiceFlow.class);
            List<NameValuePair> nameValuePairList = new ArrayList<>();
            nameValuePairList.add(new BasicNameValuePair("serviceName", serviceFlow.getServiceFlow()));
            nameValuePairList.add(new BasicNameValuePair("packageName", serviceFlow.getPackageName()));
            nameValuePairList.add(new BasicNameValuePair("className", serviceFlow.getClassName()));
            nameValuePairList.add(new BasicNameValuePair("path", serviceFlow.getPath()));
            CloseableHttpClient httpclient = HttpClients.createDefault();
            switch (serviceFlow.getEvent()) {
                case "processorAdded": {
                    HttpPost httpPost = new HttpPost(brokerServer.getURL() + "/esb/processor");
                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList, Consts.UTF_8));
                    CloseableHttpResponse response = httpclient.execute(httpPost);
                    response.close();
                    break;
                }
                case "processorDataChanged": {
                    HttpPut httpPut = new HttpPut(brokerServer.getURL() + "/esb/processor");
                    httpPut.setEntity(new UrlEncodedFormEntity(nameValuePairList, Consts.UTF_8));
                    CloseableHttpResponse response = httpclient.execute(httpPut);
                    response.close();
                    break;
                }
                case "routeDefineAdded": {
                    HttpPost httpPost = new HttpPost(brokerServer.getURL() + "/esb/processor");
                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList, Consts.UTF_8));
                    CloseableHttpResponse response = httpclient.execute(httpPost);
                    response.close();
                    break;
                }
                case "routeDefineChanged": {
                    HttpPut httpPut = new HttpPut(brokerServer.getURL() + "/esb/route");
                    httpPut.setEntity(new UrlEncodedFormEntity(nameValuePairList, Consts.UTF_8));
                    CloseableHttpResponse response = httpclient.execute(httpPut);
                    response.close();
                    break;
                }
                case "routeDefineDelete": {
                    try {
                        URI uri = new URIBuilder()
                                .setScheme("http")
                                .setHost(brokerServer.getHostAddress() + ":" + brokerServer.getPort())
                                .setPath("/route")
                                .setParameter("serviceName", serviceFlow.getServiceFlow())
                                .setParameter("packageName", serviceFlow.getPackageName())
                                .setParameter("className", serviceFlow.getClassName())
                                .setParameter("path", serviceFlow.getPath())
                                .build();
                        HttpDelete httpDelete = new HttpDelete(uri);
                        CloseableHttpResponse response = httpclient.execute(httpDelete);
                        response.close();
                    } catch (URISyntaxException e) {
                        e.printStackTrace();
                    }
                    break;
                }
                default:
                    break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

+ 2 - 6
hos-broker/pom.xml

@ -55,15 +55,11 @@
			<groupId>com.yihu.hos</groupId>
			<artifactId>hos-web-framework</artifactId>
			<version>1.1.1-SNAPSHOT</version>
			<exclusions>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.camel/camel-stream -->
	</dependencies>
	<build>
		<plugins>
			<plugin>

+ 52 - 0
hos-broker/src/main/java/com/yihu/hos/common/configuration/MongoConfiguration.java

@ -0,0 +1,52 @@
package com.yihu.hos.common.configuration;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.core.MongoTemplate;
import static java.util.Collections.singletonList;
/**
 * @created Airhead 2016/7/27.
 */
@Configuration
public class MongoConfiguration extends AbstractMongoConfiguration {
//    @Value("${spring.data.mongodb.uri}")
//    private String uri;
    @Value("${spring.data.mongodb.host}")
    private String host;
    @Value("${spring.data.mongodb.port}")
    private int port;
    @Value("${spring.data.mongodb.username}")
    private String username;
    @Value("${spring.data.mongodb.password}")
    private String password;
    @Value("${spring.data.mongodb.authenticationDatabase}")
    private String authenticationDatabase;
    @Value("${spring.data.mongodb.database}")
    private String database;
    @Override
    public String getDatabaseName() {
        return database;
    }
    @Override
    @Bean
    public Mongo mongo() throws Exception {
        return new MongoClient(singletonList(new ServerAddress(host, port)),
                singletonList(MongoCredential.createCredential(username, authenticationDatabase, password.toCharArray())));
    }
    public MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongo(), getDatabaseName());
    }
}

+ 78 - 0
hos-broker/src/main/java/com/yihu/hos/common/format/PatternLayout.java

@ -0,0 +1,78 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.yihu.hos.common.format;
import com.yihu.hos.common.constants.Constant;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.core.datatype.StringUtil;
import net.sf.json.JSONObject;
import org.apache.log4j.Layout;
import org.apache.log4j.helpers.PatternConverter;
import org.apache.log4j.helpers.PatternParser;
import org.apache.log4j.spi.LoggingEvent;
import java.util.HashMap;
import java.util.Map;
public class PatternLayout extends Layout {
    public static final String DEFAULT_CONVERSION_PATTERN = "%m%n";
    public static final String TTCC_CONVERSION_PATTERN = "%r [%t] %p %c %x - %m%n";
    protected final int BUF_SIZE;
    protected final int MAX_CAPACITY;
    private StringBuffer sbuf;
    private String pattern;
    private PatternConverter head;
    public PatternLayout() {
        this("%m%n");
    }
    public PatternLayout(String pattern) {
        this.BUF_SIZE = 256;
        this.MAX_CAPACITY = 1024;
        this.sbuf = new StringBuffer(256);
        this.pattern = pattern;
        this.head = this.createPatternParser(pattern == null?"%m%n":pattern).parse();
    }
    public void setConversionPattern(String conversionPattern) {
        this.pattern = conversionPattern;
        this.head = this.createPatternParser(conversionPattern).parse();
    }
    public String getConversionPattern() {
        return this.pattern;
    }
    public void activateOptions() {
    }
    public boolean ignoresThrowable() {
        return true;
    }
    protected PatternParser createPatternParser(String pattern) {
        return new PatternParser(pattern);
    }
    public String format(LoggingEvent event) {
        if (StringUtil.isEmpty(event.getMDC("camel.messageId"))) {
            return Constant.EMPTY;
        }
        String message = event.getMessage().toString();
        String body = message.substring(message.indexOf("Body:") + 5);
        Map<String, String> map = new HashMap<String, String>();
        map.put("exchangeId", StringUtil.toString(event.getMDC("camel.exchangeId")));
        map.put("correlationId", StringUtil.toString(event.getMDC("camel.correlationId")));
        map.put("transactionKey", StringUtil.toString(event.getMDC("camel.transactionKey")));
        map.put("routeId", StringUtil.toString(event.getMDC("camel.routeId")));
        map.put("breadcrumbId",StringUtil.toString(event.getMDC("camel.breadcrumbId")));
        map.put("camelContextId", StringUtil.toString(event.getMDC("camel.contextId")));
        map.put("body", body);
        map.put("fireTime", DateUtil.getCurrentString());
        return JSONObject.fromObject(map).toString() + "\n";
    }
}

+ 4 - 3
hos-broker/src/main/java/com/yihu/hos/common/listener/ApplicationStartListener.java

@ -105,8 +105,6 @@ public class ApplicationStartListener implements ApplicationListener<ContextRefr
        }
        // 4、=============
        // 首先启动Apache Camel服务
        SystemCamelContext.getDefaultCamelContext().start();
        SystemCamelContext.getDefaultCamelContext().setUseMDCLogging(true);
        logger.info("Apache Camel Context 启动完成......");
        // 加载和设置ClassLoader
        List<URL> URLs = new ArrayList<>();
@ -118,7 +116,8 @@ public class ApplicationStartListener implements ApplicationListener<ContextRefr
        Thread.currentThread().setContextClassLoader(camelESBClassLoader);
        SystemCamelContext.getDefaultCamelContext().setApplicationContextClassLoader(camelESBClassLoader);
        // 然后就可以进行RouteBuilder的加载
        SystemCamelContext.getDefaultCamelContext().setTracing(true);
        SystemCamelContext.getDefaultCamelContext().setUseMDCLogging(true);
        for (RouteBuilder routeBuilder : alreadyRouteBuilders) {
            try {
                SystemCamelContext.getDefaultCamelContext().addRoutes(routeBuilder);
@ -126,5 +125,7 @@ public class ApplicationStartListener implements ApplicationListener<ContextRefr
                logger.warn(e.getMessage(), e);
            }
        }
        SystemCamelContext.getDefaultCamelContext().start();
    }
}

+ 21 - 3
hos-broker/src/main/java/com/yihu/hos/services/BusinessLogService.java

@ -1,14 +1,32 @@
package com.yihu.hos.services;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.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;
/**
 * @created Airhead 2016/8/8.
 */
@Component("businessLogService")
public class BusinessLogService {
    public void log(String msg){
        //TODO:转换成BusinessLog Save to Mongodb
        System.out.println(msg);
    private static final Logger logger = LoggerFactory.getLogger(BusinessLogService.class);
    @Autowired
    private MongoOperations mongoOperations;
    public void log(String msg) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            BusinessLog businessLog = objectMapper.readValue(msg, BusinessLog.class);
            mongoOperations.save(businessLog);
        } catch (IOException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
}

+ 9 - 0
hos-broker/src/main/resources/application.yml

@ -37,6 +37,15 @@ spring:
      broker-url: tcp://172.19.103.86:61616
      user: admin
      password: admin
  data:
    mongodb:
      host: 172.19.103.86
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: log
security:
  basic:
    enabled: false

+ 1 - 1
hos-broker/src/main/resources/jndi.properties

@ -1 +1 @@
topic.logTopic=logTopic2
topic.logTopic=business.log.queue

+ 8 - 7
hos-broker/src/main/resources/log4j.properties

@ -18,16 +18,16 @@
#
# The logging properties used for testing.
#
log4j.rootLogger=INFO, stdout, jms
log4j.rootLogger=INFO, jms
# uncomment the following to enable camel debugging
#log4j.logger.org.apache.camel.component.http4=DEBUG
# CONSOLE appender not used by default
log4j.logger.org.apache.activemq=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %c - %m%n
log4j.appender.out=org.apache.log4j.ConsoleAppender
log4j.appender.out.layout=org.apache.log4j.PatternLayout
log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n
#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
log4j.appender.jms=org.apache.log4j.net.JMSAppender
log4j.appender.jms.InitialContextFactoryName=org.apache.activemq.jndi.ActiveMQInitialContextFactory
@ -35,6 +35,7 @@ log4j.appender.jms.ProviderURL=tcp://172.19.103.86:61616
log4j.appender.jms.TopicBindingName=logTopic
log4j.appender.jms.TopicConnectionFactoryBindingName=ConnectionFactory
log4j.appender.jms.layout=org.apache.log4j.patternLayout
log4j.appender.jms.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - camel.exchangeId:%-10.10X{camel.exchangeId} - camel.routeId:%-10.10X{camel.routeId} - %m%n
log4j.appender.jms.layout.ConversionPattern=%m%n
log4j.appender.jms.userName=admin
log4j.appender.jms.password=admin

+ 1 - 1
hos-core-dependencies/pom.xml

@ -22,7 +22,7 @@
    </build>
    <properties>
        <!--<jackson.version>2.4.6</jackson.version>-->
        <log4j.version>1.2.14</log4j.version>
        <log4j.version>1.2.17</log4j.version>
        <log4j2.version>2.4.1</log4j2.version>
        <slf4j.version>1.7.21</slf4j.version>
    </properties>

+ 0 - 6
hos-core/src/main/java/com/yihu/hos/core/datatype/ClassFileUtil.java

@ -1,7 +1,5 @@
package com.yihu.hos.core.datatype;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.File;
import java.io.FileInputStream;
@ -17,7 +15,6 @@ public class ClassFileUtil {
    }
    private static Logger logger = LogManager.getLogger();
    /**
     * 通过这个工具方法,可以进行class文件的创建
     * @param systemFlowURL 本次进行系统创建的system业务系统存储class文件的根目录
@ -54,7 +51,6 @@ public class ClassFileUtil {
            out.close();
            in.close();
        } catch (Exception e) {
            logger.error(e.getMessage() , e);
            return;
        }
    }
@ -78,7 +74,6 @@ public class ClassFileUtil {
            out.close();
            in.close();
        } catch (Exception e) {
            logger.error(e.getMessage() , e);
            return;
        }
    }
@ -91,7 +86,6 @@ public class ClassFileUtil {
                file.delete();
            }
        } catch (Exception e) {
            logger.error(e.getMessage() , e);
            return;
        }
    }

+ 13 - 12
hos-web-framework-dependencies/pom.xml

@ -19,6 +19,8 @@
        <camel.version>2.17.1</camel.version>
        <spring.version>4.3.2.RELEASE</spring.version>
        <hibernate.version>5.0.9.Final</hibernate.version>
        <camel.osgi.export.pkg>org.apache.camel.dataformat.xmljson.*</camel.osgi.export.pkg>
        <camel.osgi.export.service>org.apache.camel.spi.DataFormatResolver;dataformat=xmljson</camel.osgi.export.service>
        <!--<spring.security.version>4.0.2.RELEASE</spring.security.version>-->
    </properties>
@ -74,6 +76,10 @@
                    <groupId>org.slf4j</groupId>
                    <artifactId>log4j-over-slf4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
@ -108,6 +114,11 @@
        </dependency>
        <!-- camel start -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot</artifactId>
@ -196,18 +207,8 @@
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-core</artifactId>
            <version>5.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>5.13.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-camel</artifactId>
            <version>5.13.2</version>
            <artifactId>activemq-all</artifactId>
            <version>5.13.3</version>
        </dependency>
        <!-- test start -->
        <dependency>

+ 9 - 0
sdk/java/hos-client/src/main/java/com/yihu/hos/client/Request.java

@ -7,6 +7,7 @@ import java.util.Map;
 * @created Airhead 2016/8/5.
 */
public class Request {
    private String module;
    private String method;
    private Map<String, String> args;
@ -33,4 +34,12 @@ public class Request {
        args.put(name, value);
    }
    public String getModule() {
        return module;
    }
    public void setModule(String module) {
        this.module = module;
    }
}