Просмотр исходного кода

Merge branch 'dev' of chenweida/jkzl-starter into dev

chenweida 6 лет назад
Родитель
Сommit
978c06515e
16 измененных файлов с 193 добавлено и 83 удалено
  1. 5 0
      admin/admin-client-starter/pom.xml
  2. 4 5
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/HibernateFilter.java
  3. 5 6
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/HttpAdvice.java
  4. 0 24
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/RequestToMethodItem.java
  5. 5 11
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/SQLTimeAdvice.java
  6. 4 4
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/ZuulPostFilter.java
  7. 4 5
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/ZuulPreFilter.java
  8. 27 18
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/ZuulRouteFilter.java
  9. 34 0
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/config/FeignOkHttpConfig.java
  10. 3 0
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/config/ScheduledConfig.java
  11. 6 2
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/config/WebsocketConfig.java
  12. 10 0
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/properties/AdminClientProperties.java
  13. 29 0
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/websocket/buffer/EventBuffer.java
  14. 55 8
      admin/admin-client-starter/src/main/java/com/yihu/admin/client/websocket/sender/SimpleEventSender.java
  15. 1 0
      admin/admin-client-starter/src/main/resources/META-INF/spring.factories
  16. 1 0
      demo/demo-socket-client/src/main/resources/application.yml

+ 5 - 0
admin/admin-client-starter/pom.xml

@ -43,6 +43,11 @@
            <artifactId>okhttp</artifactId>
            <version>3.10.0</version>
        </dependency>
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-okhttp</artifactId>
            <version>9.7.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>

+ 4 - 5
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/HibernateFilter.java

@ -1,10 +1,9 @@
package com.yihu.admin.client.advice;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.SQLTimeEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import org.hibernate.EmptyInterceptor;
import org.hibernate.Transaction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -29,10 +28,10 @@ public class HibernateFilter extends EmptyInterceptor {
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
    @Value("${spring.application.name}")
    @Value("${spring.application.name:unknow}")
    private String spanrName;
@ -55,7 +54,7 @@ public class HibernateFilter extends EmptyInterceptor {
            event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            event.setTraceId(tracer.getCurrentSpan().traceIdString());
            event.setSuccess(1);
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
        }
        return sql;
    }

+ 5 - 6
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/HttpAdvice.java

@ -3,8 +3,8 @@ package com.yihu.admin.client.advice;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.util.NetworkUtil;
import com.yihu.admin.client.util.SpringUtil;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.HttpEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import net.sf.json.JSONObject;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
@ -21,7 +21,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
@ -41,10 +40,10 @@ public class HttpAdvice {
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
    @Value("${spring.application.name}")
    @Value("${spring.application.name:unknow}")
    private String spanrName;
    private Logger logger = LoggerFactory.getLogger(HttpAdvice.class);
@ -154,7 +153,7 @@ public class HttpAdvice {
            event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            event.setTraceId(tracer.getCurrentSpan().traceIdString());
            event.setSuccess(1);
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
            logger.debug("event:" + event.toString());
            return returnValue;
        } catch (Exception e) {
@ -165,7 +164,7 @@ public class HttpAdvice {
            event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            event.setTraceId(tracer.getCurrentSpan().traceIdString());
            event.setFail(1);
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
            logger.debug("event:" + event.toString());
            throw new Exception(e);

+ 0 - 24
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/RequestToMethodItem.java

@ -1,29 +1,5 @@
package com.yihu.admin.client.advice;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.util.NetworkUtil;
import com.yihu.admin.client.websocket.event.HttpEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import net.sf.json.JSONObject;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
/**
 * Created by chenweida on 2018/5/23 0023.1

+ 5 - 11
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/SQLTimeAdvice.java

@ -1,8 +1,8 @@
package com.yihu.admin.client.advice;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.SQLTimeEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@ -10,17 +10,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.trace.Trace;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.UUID;
/**
 * Created by chenweida on 2018/5/21 0021.1
@ -33,12 +27,12 @@ public class SQLTimeAdvice {
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
    private Logger logger = LoggerFactory.getLogger(SQLTimeAdvice.class);
    @Value("${spring.application.name}")
    @Value("${spring.application.name:unknow}")
    private String spanrName;
@ -76,7 +70,7 @@ public class SQLTimeAdvice {
            event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            event.setTraceId(tracer.getCurrentSpan().traceIdString());
            event.setSuccess(1);
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
            logger.debug("event:" + event.toString());
            return returnValue;
        } catch (Exception e) {
@ -88,7 +82,7 @@ public class SQLTimeAdvice {
            event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            event.setTraceId(tracer.getCurrentSpan().traceIdString());
            event.setFail(1);
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
            throw new Exception(e);
        }

+ 4 - 4
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/ZuulPostFilter.java

@ -4,8 +4,8 @@ import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.util.NetworkUtil;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.HttpEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -26,10 +26,10 @@ public class ZuulPostFilter extends ZuulFilter {
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
    @Value("${spring.application.name}")
    @Value("${spring.application.name:unknow}")
    private String spanrName;
    @Override
@ -82,7 +82,7 @@ public class ZuulPostFilter extends ZuulFilter {
            event.setUri(HttpAdvice.matchURI(request));
            event.setIp(ip);
            event.setMethod(request.getMethod());
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
        } catch (Exception e) {
        }

+ 4 - 5
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/ZuulPreFilter.java

@ -4,8 +4,8 @@ import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.util.NetworkUtil;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.HttpEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import net.sf.json.JSONObject;
import okhttp3.*;
import okhttp3.internal.http.HttpMethod;
@ -21,7 +21,6 @@ import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.StreamUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.List;
@ -37,10 +36,10 @@ public class ZuulPreFilter extends ZuulFilter {
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
    @Value("${spring.application.name}")
    @Value("${spring.application.name:unknow}")
    private String spanrName;
    @Autowired
    private ProxyRequestHelper helper;
@ -133,7 +132,7 @@ public class ZuulPreFilter extends ZuulFilter {
                event.setUri(HttpAdvice.matchURI(request));
                event.setIp(ip);
                event.setMethod(request.getMethod());
                simpleEventSender.send(event);
                eventBuffer.addEvent(event);
            }catch (Exception e){
            }

+ 27 - 18
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/ZuulRouteFilter.java

@ -4,8 +4,8 @@ import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.util.NetworkUtil;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.HttpEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import net.sf.json.JSONObject;
import okhttp3.*;
import okhttp3.internal.http.HttpMethod;
@ -16,34 +16,39 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.netflix.zuul.filters.ProxyRequestHelper;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.StreamUtils;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
/**
 * Created by chenweida on 2018/5/31 0031.
 * 目前还有bug 要解决跳转之后的
 */
@Component
@ConditionalOnProperty(name = "yihu.admin.client.advice.zuul.route", havingValue = "true")
public class ZuulRouteFilter extends ZuulFilter {
    private Logger logger= LoggerFactory.getLogger(ZuulRouteFilter.class);
    private Logger logger = LoggerFactory.getLogger(ZuulRouteFilter.class);
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
    @Value("${spring.application.name}")
    @Value("${spring.application.name:unknow}")
    private String spanrName;
    @Autowired
    private ProxyRequestHelper helper;
    @Autowired
    private okhttp3.OkHttpClient httpClient;
    @Override
    public String filterType() {
        //filterType:返回过滤器的类型。有pre、route、post、error等几种取值
@ -54,7 +59,7 @@ public class ZuulRouteFilter extends ZuulFilter {
    @Override
    public int filterOrder() {
        //回一个int值来指定过滤器的执行顺序,不同的过滤器允许返回相同的数字
        return 0;
        return 600;
    }
    @Override
@ -68,13 +73,12 @@ public class ZuulRouteFilter extends ZuulFilter {
        try {
            RequestContext ctx = RequestContext.getCurrentContext();
            HttpServletRequest request = ctx.getRequest();
            OkHttpClient httpClient = new OkHttpClient.Builder() .build();
            String method = request.getMethod();
            String uri = this.helper.buildZuulRequestURI(request);
            String idAddress= request.getRequestURL().toString().replace(request.getRequestURI(),"");
            Headers.Builder headers = new Headers.Builder();
            Enumeration<String> headerNames = request.getHeaderNames();
            while (headerNames.hasMoreElements()) {
@ -86,7 +90,14 @@ public class ZuulRouteFilter extends ZuulFilter {
                    headers.add(name, value);
                }
            }
            String address="";
            URL hostId = RequestContext.getCurrentContext().getRouteHost();
            Object serviceId = RequestContext.getCurrentContext().get("serviceId");
            if(hostId!=null){
                address=hostId.toString();
            }else if(!StringUtils.isEmpty(serviceId)){
                address="http://"+serviceId.toString();
            }
            InputStream inputStream = request.getInputStream();
            RequestBody requestBody = null;
@ -100,7 +111,7 @@ public class ZuulRouteFilter extends ZuulFilter {
            Request.Builder builder = new Request.Builder()
                    .headers(headers.build())
                    .url(idAddress+uri)
                    .url(address+uri)
                    .method(method, requestBody);
            //日志
            HttpEvent event = new HttpEvent();
@ -114,15 +125,15 @@ public class ZuulRouteFilter extends ZuulFilter {
            }
            Response response = httpClient.newCall(builder.build()).execute();
            try{
            try {
                Long endTime = System.currentTimeMillis();
                event.setHeader(headerObj.toString());
                event.setEventStartTime(startTime);
                event.setEventEndTime(endTime);
                event.setExcuteTime(endTime-startTime);
                event.setExcuteTime(endTime - startTime);
                event.setHeader(headerObj.toString());
                event.setEventName("system_zuul_tracer");
                event.setResponseParams( response.body().string());
                event.setResponseParams(response.body().string());
                event.setSpanName(spanrName);
                event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
                event.setTraceId(tracer.getCurrentSpan().traceIdString());
@ -131,8 +142,8 @@ public class ZuulRouteFilter extends ZuulFilter {
                event.setUri(HttpAdvice.matchURI(request));
                event.setIp(ip);
                event.setMethod(request.getMethod());
                simpleEventSender.send(event);
            }catch (Exception e){
                eventBuffer.addEvent(event);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error(e.getMessage());
            }
@ -143,12 +154,10 @@ public class ZuulRouteFilter extends ZuulFilter {
                responseHeaders.put(entry.getKey(), entry.getValue());
            }
            this.helper.setResponse(response.code(), response.body().byteStream(),responseHeaders);
            this.helper.setResponse(response.code(), response.body().byteStream(), responseHeaders);
            ctx.setRouteHost(null); // prevent SimpleHostRoutingFilter from running
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage());

+ 34 - 0
admin/admin-client-starter/src/main/java/com/yihu/admin/client/config/FeignOkHttpConfig.java

@ -0,0 +1,34 @@
package com.yihu.admin.client.config;
import feign.Feign;
import okhttp3.ConnectionPool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.netflix.feign.FeignAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit;
/**
 * Created by chenweida on 2018/6/4 0004.
 */
@Configuration
@ConditionalOnProperty(name = "yihu.admin.client.advice.zuul.route", havingValue = "true")
@AutoConfigureBefore(FeignAutoConfiguration.class)
public class FeignOkHttpConfig {
    @Bean
    public okhttp3.OkHttpClient okHttpClient(){
        return new okhttp3.OkHttpClient.Builder()
                .readTimeout(60, TimeUnit.SECONDS)
                .connectTimeout(60, TimeUnit.SECONDS)
                .writeTimeout(120, TimeUnit.SECONDS)
                .connectionPool(new ConnectionPool())
                // .addInterceptor();
                .build();
    }
}

+ 3 - 0
admin/admin-client-starter/src/main/java/com/yihu/admin/client/config/ScheduledConfig.java

@ -1,10 +1,12 @@
package com.yihu.admin.client.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.web.client.RestTemplate;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@ -24,4 +26,5 @@ public class ScheduledConfig implements SchedulingConfigurer {
    public Executor setTaskExecutors() {
        return Executors.newScheduledThreadPool(3); // 3个线程来处理。
    }
}

+ 6 - 2
admin/admin-client-starter/src/main/java/com/yihu/admin/client/config/WebsocketConfig.java

@ -3,6 +3,7 @@ package com.yihu.admin.client.config;
import com.yihu.admin.client.advice.HibernateFilter;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.websocket.SocketClient;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import org.hibernate.EmptyInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
@ -33,10 +34,13 @@ import java.util.Map;
public class WebsocketConfig {
    @Autowired
    SocketClient socketClient;
    @Autowired
    AdminClientProperties adminClientProperties;
    @Bean
    public SimpleEventSender simpleEventSender() {
        return new SimpleEventSender(socketClient);
    public EventBuffer eventBuffer() {
        return new EventBuffer(adminClientProperties);
    }
}

+ 10 - 0
admin/admin-client-starter/src/main/java/com/yihu/admin/client/properties/AdminClientProperties.java

@ -24,6 +24,8 @@ public class AdminClientProperties {
    private Boolean zuulRoute;//port
    @Value("${yihu.admin.client.advice.http:true}")
    private Boolean http;//port
    @Value("${yihu.admin.client.buffer.size:100000}")
    private Integer bufferSize;//port
    public String getIp() {
        return ip;
@ -88,4 +90,12 @@ public class AdminClientProperties {
    public void setZuulRoute(Boolean zuulRoute) {
        this.zuulRoute = zuulRoute;
    }
    public Integer getBufferSize() {
        return bufferSize;
    }
    public void setBufferSize(Integer bufferSize) {
        this.bufferSize = bufferSize;
    }
}

+ 29 - 0
admin/admin-client-starter/src/main/java/com/yihu/admin/client/websocket/buffer/EventBuffer.java

@ -0,0 +1,29 @@
package com.yihu.admin.client.websocket.buffer;
import ch.qos.logback.classic.spi.LoggingEvent;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.websocket.event.IEvent;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
 * Created by chenweida on 2018/2/24.
 */
public class EventBuffer {
    //缓冲队列
    BlockingQueue queue = null;
    public EventBuffer(AdminClientProperties adminClientProperties) {
        queue = new ArrayBlockingQueue(adminClientProperties.getBufferSize());
    }
    public BlockingQueue getBuffer() {
        return queue;
    }
    public void addEvent(IEvent event) {
        queue.add(event);
    }
}

+ 55 - 8
admin/admin-client-starter/src/main/java/com/yihu/admin/client/websocket/sender/SimpleEventSender.java

@ -1,27 +1,48 @@
package com.yihu.admin.client.websocket.sender;
import com.yihu.admin.client.websocket.SocketClient;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.IEvent;
import net.sf.json.JSONObject;
import org.java_websocket.client.WebSocketClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * Created by chenweida on 2018/5/23 0023.1
 */
@Component
public class SimpleEventSender implements EventSender {
    private Logger logger = LoggerFactory.getLogger(SimpleEventSender.class);
    @Autowired
    private Tracer tracer;
    @Value("${spring.application.name:unknow}")
    private String spanrName;
    public SimpleEventSender( SocketClient socketClient) {
        this.socketClient = socketClient;
    }
    private SocketClient socketClient;
    @Autowired
    private EventBuffer eventBuffer;
    @Override
    public Boolean send(IEvent event) {
        try {
            if (StringUtils.isEmpty(event.getTraceId())) {
                event.setTraceId(tracer.getCurrentSpan().traceIdString());
            }
            if (StringUtils.isEmpty(event.getSpanId())) {
                event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            }
            if (StringUtils.isEmpty(event.getSpanName())) {
                event.setSpanName(spanrName);
            }
            JSONObject jsonObject = new JSONObject();
            Method[] methods = event.getClass().getMethods();
            for (Method method : methods) {
@ -46,11 +67,37 @@ public class SimpleEventSender implements EventSender {
                    }
                }
            }
            socketClient.getCurrentClient().send(jsonObject.toString());
            eventBuffer.addEvent(event);
            return true;
        } catch (Exception e) {
            logger.error(e.getMessage());
            return false;
        }
    }
    @Scheduled(cron = "0/10 * * * * ?")
    public void send() {
        try {
            int success = 0;
            int error = 0;
            //如果队列没数据休眠
            if (eventBuffer.getBuffer().size() == 0) {
                return;
            }
            List<IEvent> eventObjectList = new ArrayList<>();
            //获取队列中的全部数据
            eventBuffer.getBuffer().drainTo(eventObjectList);
            for (IEvent event : eventObjectList) {
                if (send(event)) {
                    success++;
                } else {
                    error++;
                }
            }
            logger.info(new StringBuffer("all:" + eventObjectList.size() + ",success:" + success + ",error:" + error).toString());
        } catch (Exception e) {
            logger.error(e.getMessage());
            return;
        }
    }
}

+ 1 - 0
admin/admin-client-starter/src/main/resources/META-INF/spring.factories

@ -1,3 +1,4 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.yihu.admin.client.config.WebsocketConfig,\
  com.yihu.admin.client.config.FeignOkHttpConfig,\
  com.yihu.admin.client.config.ScheduledConfig

+ 1 - 0
demo/demo-socket-client/src/main/resources/application.yml

@ -22,6 +22,7 @@ yihu:
        zuul:
          pre: true #默认false
          post: true #默认false
          route:true #默认false
      server:
        ip: 192.168.131.102
        port: 8082