瀏覽代碼

增加Arbiter对Endpoint进行健康检查逻辑

Airhead 8 年之前
父節點
當前提交
32828cc40e

+ 5 - 28
hos-arbiter/hos-arbiter.iml

@ -20,11 +20,6 @@
    <orderEntry type="library" name="Maven: org.springframework:spring-beans:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.1.7" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.1.7" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.21" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.21" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.4" level="project" />
@ -59,6 +54,7 @@
    <orderEntry type="library" name="Maven: javax.transaction:javax.transaction-api:1.2" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:1.10.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:1.12.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.21" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-orm:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-aspects:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-mongodb:1.4.0.RELEASE" level="project" />
@ -67,11 +63,11 @@
    <orderEntry type="library" name="Maven: org.mongodb:bson:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:1.9.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:mongo-java-driver:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-spring-boot:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-spring:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-core:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.2.11" level="project" />
    <orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.2.11" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-spring-boot:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-spring:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-http4:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.camel:camel-http-common:2.17.1" level="project" />
    <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:3.1.0" level="project" />
@ -134,7 +130,7 @@
    <orderEntry type="library" name="Maven: commons-net:commons-net:3.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.2" level="project" />
    <orderEntry type="library" name="Maven: com.belerweb:pinyin4j:2.5.0" level="project" />
    <orderEntry type="library" name="Maven: log4j:log4j:1.2.14" level="project" />
    <orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.6.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.6.2" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.4.0" level="project" />
@ -149,26 +145,7 @@
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq:activemq-core:5.7.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq:kahadb:5.7.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq.protobuf:activemq-protobuf:1.1" level="project" />
    <orderEntry type="library" name="Maven: org.fusesource.mqtt-client:mqtt-client:1.3" level="project" />
    <orderEntry type="library" name="Maven: org.fusesource.hawtdispatch:hawtdispatch-transport:1.11" level="project" />
    <orderEntry type="library" name="Maven: org.fusesource.hawtdispatch:hawtdispatch:1.11" level="project" />
    <orderEntry type="library" name="Maven: org.fusesource.hawtbuf:hawtbuf:1.9" level="project" />
    <orderEntry type="library" name="Maven: org.apache.geronimo.specs:geronimo-j2ee-management_1.1_spec:1.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.jasypt:jasypt:1.9.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq:activemq-pool:5.13.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq:activemq-jms-pool:5.13.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.geronimo.specs:geronimo-jta_1.0.1B_spec:1.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.4.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq:activemq-client:5.13.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq:activemq-camel:5.13.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq:activemq-spring:5.13.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.xbean:xbean-spring:3.18" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq:activemq-broker:5.13.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq:activemq-openwire-legacy:5.13.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.activemq:activemq-all:5.13.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:1.4.0.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:1.4.0.RELEASE" level="project" />

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

@ -13,11 +13,15 @@ import java.util.Date;
public class Endpoint {
    @Id
    private String id;
    private String serviceName;
    private String name;
    private String endpoint;
    @Indexed(name = "updateTime_1", expireAfterSeconds = 30)
    private Date updateTime;
    private String event;
    private Integer healthCheckType;
    private String healthCheckURL;
    private Integer metricsType;
    private String metricsURL;
    public String getId() {
        return id;
@ -27,12 +31,12 @@ public class Endpoint {
        this.id = id;
    }
    public String getServiceName() {
        return serviceName;
    public String getName() {
        return name;
    }
    public void setServiceName(String serviceName) {
        this.serviceName = serviceName;
    public void setName(String name) {
        this.name = name;
    }
    public String getEndpoint() {
@ -58,4 +62,36 @@ public class Endpoint {
    public void setEvent(String event) {
        this.event = event;
    }
    public Integer getHealthCheckType() {
        return healthCheckType;
    }
    public void setHealthCheckType(Integer healthCheckType) {
        this.healthCheckType = healthCheckType;
    }
    public String getHealthCheckURL() {
        return healthCheckURL;
    }
    public void setHealthCheckURL(String healthCheckURL) {
        this.healthCheckURL = healthCheckURL;
    }
    public Integer getMetricsType() {
        return metricsType;
    }
    public void setMetricsType(Integer metricsType) {
        this.metricsType = metricsType;
    }
    public String getMetricsURL() {
        return metricsURL;
    }
    public void setMetricsURL(String metricsURL) {
        this.metricsURL = metricsURL;
    }
}

+ 20 - 0
hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/SerivceHealthRouter.java

@ -0,0 +1,20 @@
package com.yihu.hos.arbiter.routers;
import com.yihu.hos.arbiter.configuration.ActivemqConfiguration;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * @created Airhead 2016/8/1.
 */
@Component
public class SerivceHealthRouter extends RouteBuilder {
    @Autowired
    private ActivemqConfiguration activemqConfiguration;
    @Override
    public void configure() throws Exception {
        from("timer:brokerServerOnline?period={{arbiter.timer.period}}")
                .to("bean:healthCheckService?method=check");
    }
}

+ 37 - 0
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/HealthCheckService.java

@ -0,0 +1,37 @@
package com.yihu.hos.arbiter.services;
import com.yihu.hos.arbiter.models.Endpoint;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
 * @created Airhead 2016/8/23.
 */
@Service("healthCheckService")
public class HealthCheckService {
    public void check() {
        List<Endpoint> endpointList = getEndpointList();
        endpointList.forEach(this::remoteCheck);
    }
    /**
     * 返回所有拉取方式进行健康检测的Endpoint列表
     *
     * @return
     */
    private List<Endpoint> getEndpointList() {
        //TODO:
        return new ArrayList<>();
    }
    /**
     * 调用实际的检查地址
     *
     * @param endpoint
     */
    private void remoteCheck(Endpoint endpoint) {
        //TODO:
    }
}

+ 0 - 15
hos-arbiter/src/main/resources/application.properties

@ -1,15 +0,0 @@
server.port=10135
#spring.data.mongodb.uri=mongodb://esb:esb@172.19.103.86:27017/?authSource=admin
#spring.data.mongodb.host=192.168.1.220
#spring.data.mongodb.port=27017
#spring.data.mongodb.username=admin
#spring.data.mongodb.password=admin
spring.data.mongodb.host=192.168.1.220
spring.data.mongodb.port=27017
spring.data.mongodb.username=admin
spring.data.mongodb.password=admin
spring.data.mongodb.authenticationDatabase=admin
spring.data.mongodb.database=configuration
spring.activemq.broker-url=tcp://172.19.103.86:61616
spring.activemq.user=admin
spring.activemq.password=admin

+ 61 - 0
hos-arbiter/src/main/resources/application.yml

@ -0,0 +1,61 @@
server:
  port: 10135
  application:
    name: ArbiterServer
---
spring:
  profiles: dev
  data:
    mongodb:
      host: 172.19.103.86
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: configuration
  activemq:
    broker-url: tcp://172.19.103.86:61616
    user: admin
    password: admin
arbiter:
  timer:
      period: 10000
---
spring:
  profiles: test
  data:
    mongodb:
      host: 172.19.103.86
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: configuration
  activemq:
    broker-url: tcp://172.19.103.86:61616
    user: admin
    password: admin
arbiter:
  timer:
      period: 10000
---
spring:
  profiles: prod
  data:
    mongodb:
      host: 172.19.103.86
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: configuration
  activemq:
    broker-url: tcp://172.19.103.86:61616
    user: admin
    password: admin
arbiter:
  timer:
      period: 10000