chenweida vor 6 Jahren
Ursprung
Commit
b901a522e2

+ 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>

+ 22 - 13
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/ZuulRouteFilter.java

@ -20,9 +20,11 @@ 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;
@ -33,7 +35,7 @@ import java.util.Map;
@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
@ -44,6 +46,9 @@ public class ZuulRouteFilter extends ZuulFilter {
    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 1;
    }
    @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());
@ -132,7 +143,7 @@ public class ZuulRouteFilter extends ZuulFilter {
                event.setIp(ip);
                event.setMethod(request.getMethod());
                simpleEventSender.send(event);
            }catch (Exception e){
            } 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个线程来处理。
    }
}

+ 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