Преглед на файлове

屏蔽掉过时的依赖

lianshufeng преди 1 година
родител
ревизия
2ff401acaf

+ 38 - 32
components/ApplicationClient/pom.xml

@@ -68,6 +68,12 @@
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-consul-discovery</artifactId>
             <version>${spring-cloud-starter-consul-discovery.version}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>commons-logging</artifactId>
+                    <groupId>commons-logging</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
@@ -84,40 +90,40 @@
         </dependency>
 
 
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
-            <version>${netflix-hystrix.version}</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>spring-boot-autoconfigure</artifactId>
-                    <groupId>org.springframework.boot</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>-->
+<!--            <version>${netflix-hystrix.version}</version>-->
+<!--            <exclusions>-->
+<!--                <exclusion>-->
+<!--                    <artifactId>spring-boot-autoconfigure</artifactId>-->
+<!--                    <groupId>org.springframework.boot</groupId>-->
+<!--                </exclusion>-->
+<!--            </exclusions>-->
+<!--        </dependency>-->
 
 
         <!--hystrix-->
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
-            <version>${netflix-hystrix.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-core</artifactId>
-                </exclusion>
-                <exclusion>
-                    <artifactId>spring-boot-autoconfigure</artifactId>
-                    <groupId>org.springframework.boot</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>-->
+<!--            <version>${netflix-hystrix.version}</version>-->
+<!--            <exclusions>-->
+<!--                <exclusion>-->
+<!--                    <groupId>com.fasterxml.jackson.core</groupId>-->
+<!--                    <artifactId>jackson-core</artifactId>-->
+<!--                </exclusion>-->
+<!--                <exclusion>-->
+<!--                    <artifactId>spring-boot-autoconfigure</artifactId>-->
+<!--                    <groupId>org.springframework.boot</groupId>-->
+<!--                </exclusion>-->
+<!--            </exclusions>-->
+<!--        </dependency>-->
         <!-- feign -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-openfeign</artifactId>
-            <version>4.1.0</version>
+            <version>4.1.3</version>
             <exclusions>
                  <exclusion>
                     <artifactId>spring-boot-autoconfigure</artifactId>
@@ -129,11 +135,11 @@
 
 
         <!--ribbon-->
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
-            <version>${netflix-ribbon.version}</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.cloud</groupId>-->
+<!--            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>-->
+<!--            <version>${netflix-ribbon.version}</version>-->
+<!--        </dependency>-->
 
         <!--注意:生效需要在 application 中增加下面2条-->
         <!--spring.cloud.bus.enabled=true-->

+ 1 - 3
components/ApplicationClient/src/main/java/com/github/microservice/app/annotation/EnableApplicationClient.java

@@ -2,10 +2,8 @@ package com.github.microservice.app.annotation;
 
 import com.github.microservice.app.core.config.ConsulRegisterConfig;
 import com.github.microservice.app.core.config.FeignConfig;
-import com.github.microservice.app.core.config.PromiseConfig;
 import com.github.microservice.app.core.config.RestTemplateConfig;
 import com.github.microservice.app.stream.StreamConfig;
-import org.springframework.cloud.netflix.hystrix.EnableHystrix;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.Import;
 import org.springframework.scheduling.annotation.EnableScheduling;
@@ -19,7 +17,7 @@ import java.lang.annotation.*;
 
 //引用的非公开变量不能继承
 @EnableFeignClients
-@EnableHystrix
+//@EnableHystrix
 //@Import({org.springframework.cloud.openfeign.FeignClientsRegistrar.class})
 
 

+ 0 - 41
components/ApplicationClient/src/main/java/com/github/microservice/app/core/config/PromiseConfig.java

@@ -1,41 +0,0 @@
-package com.github.microservice.app.core.config;
-
-import com.github.microservice.app.promise.hystrix.PromiseHystrixCommandExecutionHook;
-import com.netflix.hystrix.strategy.HystrixPlugins;
-import com.netflix.hystrix.strategy.concurrency.HystrixConcurrencyStrategy;
-import com.netflix.hystrix.strategy.eventnotifier.HystrixEventNotifier;
-import com.netflix.hystrix.strategy.metrics.HystrixMetricsPublisher;
-import com.netflix.hystrix.strategy.properties.HystrixPropertiesStrategy;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-
-@Slf4j
-@Configuration
-@ComponentScan({
-        "com.github.microservice.app.promise",
-})
-public class PromiseConfig {
-
-
-    @Autowired
-    private void init(ApplicationContext applicationContext, PromiseHystrixCommandExecutionHook promiseHystrixCommandExecutionHook) {
-        HystrixConcurrencyStrategy existingConcurrencyStrategy = HystrixPlugins.getInstance().getConcurrencyStrategy();
-        HystrixEventNotifier eventNotifier = HystrixPlugins.getInstance().getEventNotifier();
-        HystrixMetricsPublisher metricsPublisher = HystrixPlugins.getInstance().getMetricsPublisher();
-        HystrixPropertiesStrategy propertiesStrategy = HystrixPlugins.getInstance().getPropertiesStrategy();
-//        HystrixCommandExecutionHook commandExecutionHook = HystrixPlugins.getInstance().getCommandExecutionHook();
-        // reset the Hystrix plugin
-        HystrixPlugins.reset();
-        // configure the  plugin
-        HystrixPlugins.getInstance().registerConcurrencyStrategy(existingConcurrencyStrategy);
-        HystrixPlugins.getInstance().registerEventNotifier(eventNotifier);
-        HystrixPlugins.getInstance().registerMetricsPublisher(metricsPublisher);
-        HystrixPlugins.getInstance().registerPropertiesStrategy(propertiesStrategy);
-        HystrixPlugins.getInstance().registerCommandExecutionHook(promiseHystrixCommandExecutionHook);
-        log.info("Context propagation enabled for Hystrix.");
-
-    }
-}

+ 0 - 17
components/ApplicationClient/src/main/java/com/github/microservice/app/promise/annotation/Promise.java

@@ -1,17 +0,0 @@
-package com.github.microservice.app.promise.annotation;
-
-import java.lang.annotation.*;
-
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface Promise {
-
-    /**
-     * 补偿方法
-     *
-     * @return
-     */
-    String value();
-
-}

+ 0 - 89
components/ApplicationClient/src/main/java/com/github/microservice/app/promise/aop/PromiseAop.java

@@ -1,89 +0,0 @@
-package com.github.microservice.app.promise.aop;
-
-import com.github.microservice.app.promise.annotation.Promise;
-import com.github.microservice.app.promise.hystrix.PromiseStreamHelper;
-import com.github.microservice.app.promise.model.PromiseModel;
-import com.github.microservice.core.helper.SpringBeanHelper;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.reflect.MethodUtils;
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.annotation.AfterThrowing;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-@Slf4j
-@Aspect
-@Component
-public class PromiseAop {
-
-    @Value("${spring.application.name}")
-    private String _appName;
-
-    @Autowired
-    private SpringBeanHelper springBeanHelper;
-
-    @Autowired
-    private PromiseStreamHelper promiseStreamHelper;
-
-    @Pointcut("@annotation(com.github.microservice.app.promise.annotation.Promise) ")
-    public void promiseAop() {
-    }
-
-
-    @AfterThrowing(throwing = "ex", pointcut = "promiseAop()")
-    public void promiseAopException(JoinPoint point, Exception ex) {
-        if (!(point instanceof MethodInvocationProceedingJoinPoint)) {
-            return;
-        }
-        //取出切点方法
-        final MethodInvocationProceedingJoinPoint joinPoint = (MethodInvocationProceedingJoinPoint) point;
-        final MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
-        final Method method = methodSignature.getMethod();
-        //取出注解
-        final Promise promise = method.getAnnotation(Promise.class);
-        if (!StringUtils.hasText(promise.value())) {
-            log.error("无效的补偿方法 : {}", method);
-            return;
-        }
-        //寻找补偿方法
-        final Method promiseMethod = MethodUtils.getMatchingMethod(joinPoint.getThis().getClass(), promise.value(), method.getParameterTypes());
-        if (promiseMethod == null) {
-            log.error("寻找补偿方法失败 : {}", method);
-            return;
-        }
-
-
-        final PromiseModel promiseModel = new PromiseModel();
-        //应用名
-        promiseModel.setApplicationName(_appName);
-        //bean的名称
-        promiseModel.setBeanName(this.springBeanHelper.getBeanName(joinPoint.getThis()));
-        //方法
-        promiseModel.setMethodName(promiseMethod.getName());
-        //方法的参数
-        Optional.ofNullable(promiseMethod.getParameterTypes()).ifPresent((types) -> {
-            promiseModel.setParameterTypes(
-                    Arrays.stream(types).map((it) -> {
-                        return it.getName();
-                    }).collect(Collectors.toList()).toArray(new String[0])
-            );
-        });
-        //参数
-        promiseModel.setParameter(joinPoint.getArgs());
-
-        this.promiseStreamHelper.addFallback(promiseModel);
-    }
-
-
-}

+ 0 - 83
components/ApplicationClient/src/main/java/com/github/microservice/app/promise/hystrix/PromiseHystrixCommandExecutionHook.java

@@ -1,83 +0,0 @@
-package com.github.microservice.app.promise.hystrix;
-
-import com.github.microservice.app.promise.model.PromiseModel;
-import com.github.microservice.core.helper.SpringBeanHelper;
-import com.netflix.hystrix.HystrixInvokable;
-import com.netflix.hystrix.contrib.javanica.command.AbstractHystrixCommand;
-import com.netflix.hystrix.contrib.javanica.command.CommandActions;
-import com.netflix.hystrix.contrib.javanica.command.MethodExecutionAction;
-import com.netflix.hystrix.strategy.executionhook.HystrixCommandExecutionHook;
-import lombok.SneakyThrows;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-@Component
-public class PromiseHystrixCommandExecutionHook extends HystrixCommandExecutionHook {
-
-    @Value("${spring.application.name}")
-    private String _appName;
-
-    @Autowired
-    private PromiseStreamHelper promiseStreamHelper;
-
-    @Autowired
-    private SpringBeanHelper springBeanHelper;
-
-
-    @Override
-    public <T> Exception onFallbackError(HystrixInvokable<T> commandInstance, Exception e) {
-        recordFallBack(commandInstance);
-        return super.onFallbackError(commandInstance, e);
-    }
-
-
-    /**
-     * 发送到mq里进行补偿
-     *
-     * @param commandInstance
-     */
-    @SneakyThrows
-    private void recordFallBack(HystrixInvokable commandInstance) {
-        if (!(commandInstance instanceof AbstractHystrixCommand)) {
-            return;
-        }
-        AbstractHystrixCommand command = ((AbstractHystrixCommand) commandInstance);
-        Field commandActionsField = AbstractHystrixCommand.class.getDeclaredField("commandActions");
-        commandActionsField.setAccessible(true);
-        Object commandActionsValue = commandActionsField.get(command);
-        MethodExecutionAction commandAction = (MethodExecutionAction) ((CommandActions) commandActionsValue).getFallbackAction();
-
-
-        PromiseModel promiseModel = new PromiseModel();
-
-        //应用名
-        promiseModel.setApplicationName(_appName);
-        //SpringBean的名称
-        promiseModel.setBeanName(springBeanHelper.getBeanName(commandAction.getObject()));
-        //方法
-        promiseModel.setMethodName(commandAction.getMethod().getName());
-
-        //方法的参数
-        Optional.ofNullable(commandAction.getMethod().getParameterTypes()).ifPresent((types) -> {
-            promiseModel.setParameterTypes(
-                    Arrays.stream(types).map((it) -> {
-                        return it.getName();
-                    }).collect(Collectors.toList()).toArray(new String[0])
-            );
-        });
-
-        //参数
-        promiseModel.setParameter(commandAction.getArgs());
-
-
-        this.promiseStreamHelper.addFallback(promiseModel);
-    }
-
-
-}

+ 0 - 34
components/ApplicationClient/src/main/java/com/github/microservice/app/promise/hystrix/PromiseStreamHelper.java

@@ -1,34 +0,0 @@
-package com.github.microservice.app.promise.hystrix;
-
-import com.github.microservice.app.promise.model.PromiseModel;
-import com.github.microservice.app.promise.stream.PromiseStreamConsumer;
-import com.github.microservice.app.stream.StreamHelper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-@Component
-public class PromiseStreamHelper {
-
-    @Value("${spring.application.name}")
-    private String applicationName;
-
-    @Autowired
-    private StreamHelper streamHelper;
-
-
-    /**
-     * 添加
-     *
-     * @param promiseModel
-     */
-    public void addFallback(PromiseModel promiseModel) {
-        try {
-            this.streamHelper.send(PromiseStreamConsumer.getStreamName(applicationName), promiseModel);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-    }
-
-}

+ 0 - 27
components/ApplicationClient/src/main/java/com/github/microservice/app/promise/model/PromiseModel.java

@@ -1,27 +0,0 @@
-package com.github.microservice.app.promise.model;
-
-import lombok.*;
-
-@Data
-@Builder
-@EqualsAndHashCode
-@NoArgsConstructor
-@AllArgsConstructor
-public class PromiseModel {
-
-    //应用名
-    private String applicationName;
-
-    //补偿的对象(仅为spring的Bean的名称)
-    private String beanName;
-
-    //补偿的方法名
-    private String methodName;
-
-    //参数类型
-    private String[] parameterTypes;
-
-    //参数
-    private Object[] parameter;
-
-}

+ 0 - 135
components/ApplicationClient/src/main/java/com/github/microservice/app/promise/stream/PromiseStreamConsumer.java

@@ -1,135 +0,0 @@
-package com.github.microservice.app.promise.stream;
-
-import com.github.microservice.app.promise.model.PromiseModel;
-import com.github.microservice.app.stream.message.MessageBusHelper;
-import com.github.microservice.app.stream.message.MessageContentConsumer;
-import com.github.microservice.core.util.JsonUtil;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.reflect.MethodUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.ApplicationContext;
-import org.springframework.messaging.MessageHeaders;
-import org.springframework.messaging.MessagingException;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-@Component
-public class PromiseStreamConsumer extends MessageContentConsumer<PromiseModel> {
-
-    @Autowired
-    private ApplicationContext applicationContext;
-
-    public static final String Name = "PromiseStream";
-
-    @Value("${spring.application.name}")
-    private String _appName;
-
-
-    /**
-     * 取出流名
-     *
-     * @param applicationName
-     * @return
-     */
-    public static String getStreamName(String applicationName) {
-        return applicationName + "_" + Name;
-    }
-
-
-    @Autowired
-    private void init(MessageBusHelper messageBusHelper) {
-        //绑定消息流
-        messageBusHelper.bindConsumer(
-                getStreamName(_appName),
-                this,
-                Map.of(
-                        "group", _appName
-                ),
-                Map.of(
-                        "maxAttempts", 10, //最大重试次数
-                        "backOffInitialInterval", 1000, // 每次重试递增秒
-                        "backOffMaxInterval", 15000 // 最大秒数
-                ),
-                Map.of(
-                        "enableDlq", true,
-                        "dlqName", Name + "-dlq"
-                )
-        );
-    }
-
-    @Override
-    @SneakyThrows
-    public void handleMessage(MessageHeaders messageHeaders, PromiseModel promiseModel) throws MessagingException {
-        log.info("promise : {} ", promiseModel);
-        //取出bean
-        Object bean = this.applicationContext.getBean(promiseModel.getBeanName());
-        if (promiseModel.getParameterTypes() == null) {
-            MethodUtils.invokeExactMethod(bean, promiseModel.getMethodName());
-        } else if (promiseModel.getParameterTypes() == null && promiseModel.getParameter() != null) {
-            MethodUtils.invokeExactMethod(bean, promiseModel.getMethodName(), promiseModel.getParameter());
-        } else {
-            //转换参数
-            ParameterModel parameterModel = convertParameter(promiseModel);
-
-            MethodUtils.invokeExactMethod(
-                    bean,
-                    promiseModel.getMethodName(),
-                    parameterModel.getParameter(),
-                    parameterModel.getTyeps()
-            );
-        }
-    }
-
-
-    /**
-     * 转换参数
-     *
-     * @param promiseModel
-     */
-    @SneakyThrows
-    private ParameterModel convertParameter(PromiseModel promiseModel) {
-        final ParameterModel parameterModel = new ParameterModel();
-
-        //字符串类型
-        final String[] textType = promiseModel.getParameterTypes();
-        List<Class> types = new ArrayList<>();
-        List<Object> parameter = new ArrayList<>();
-
-        //todo 需要将map转换为指定类型参数
-        for (int i = 0; i < textType.length; i++) {
-            Class cls = Class.forName(textType[i]);
-            Object obj = promiseModel.getParameter()[i];
-            if (cls != obj.getClass()) {
-                obj = JsonUtil.toObject(JsonUtil.toJson(obj), cls);
-            }
-            parameter.add(obj);
-            types.add(cls);
-        }
-
-        parameterModel.setTyeps(types.toArray(new Class[0]));
-        parameterModel.setParameter(parameter.toArray(new Object[0]));
-        return parameterModel;
-
-
-    }
-
-
-    @Data
-    @AllArgsConstructor
-    @NoArgsConstructor
-    public static class ParameterModel {
-        private Class[] tyeps;
-        private Object[] Parameter;
-    }
-
-
-}