com.github.liaomengge.base_common.feign.hystrix.initializer.FeignHystrixInitializer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of base-feign-spring-boot-starter Show documentation
Show all versions of base-feign-spring-boot-starter Show documentation
base common starter for developer
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));
}
}