All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.liaomengge.base_common.feign.hystrix.initializer.FeignHystrixInitializer Maven / Gradle / Ivy

The newest version!
package com.github.liaomengge.base_common.feign.hystrix.initializer;

import com.github.liaomengge.base_common.feign.manager.FeignClientManager;
import com.github.liaomengge.base_common.feign.pojo.FeignTarget;
import com.google.common.collect.Maps;
import feign.Feign;
import lombok.Getter;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.ReflectionUtils;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * Created by liaomengge on 2020/12/17.
 */
public class FeignHystrixInitializer implements InitializingBean {

    @Getter
    private final Map> hystrixCommandKeyMap = Maps.newConcurrentMap();

    private final FeignClientManager feignClientManager;

    public FeignHystrixInitializer(FeignClientManager feignClientManager) {
        this.feignClientManager = feignClientManager;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Map feignTargetMap = feignClientManager.getFeignTargetMap();
        Map> commandKeyMap = buildFeignHystrixCommandKey(feignTargetMap);
        hystrixCommandKeyMap.putAll(commandKeyMap);
    }

    private Map> buildFeignHystrixCommandKey(Map feignTargetMap) {
        return feignTargetMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey,
                entry -> {
                    FeignTarget feignTarget = entry.getValue();
                    Method[] methods = ReflectionUtils.getDeclaredMethods(feignTarget.getType());
                    return Arrays.stream(methods).filter(method -> !ReflectionUtils.isObjectMethod(method))
                            .map(method -> Feign.configKey(feignTarget.getType(), method))
                            .filter(Objects::nonNull)
                            .collect(Collectors.toSet());
                }, (v1, v2) -> v2));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy