com.nepxion.discovery.plugin.framework.configuration.PluginAutoConfiguration Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of discovery-plugin-framework-starter Show documentation
Show all versions of discovery-plugin-framework-starter Show documentation
Nepxion Discovery is a solution for Spring Cloud with blue green, gray, weight, limitation, circuit breaker, degrade, isolation, monitor, tracing, dye, failover, async agent
The newest version!
package com.nepxion.discovery.plugin.framework.configuration;
/**
* Title: Nepxion Discovery
* Description: Nepxion Discovery
* Copyright: Copyright (c) 2017-2050
* Company: Nepxion
* @author Haojun Ren
* @version 1.0
*/
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import com.nepxion.discovery.common.constant.DiscoveryConstant;
import com.nepxion.discovery.common.entity.WeightFilterEntity;
import com.nepxion.discovery.common.entity.WeightRandomType;
import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter;
import com.nepxion.discovery.plugin.framework.cache.PluginCache;
import com.nepxion.discovery.plugin.framework.cache.RuleCache;
import com.nepxion.discovery.plugin.framework.context.PluginContextAware;
import com.nepxion.discovery.plugin.framework.context.PluginContextHolder;
import com.nepxion.discovery.plugin.framework.event.PluginEventWapper;
import com.nepxion.discovery.plugin.framework.event.PluginPublisher;
import com.nepxion.discovery.plugin.framework.event.PluginSubscriber;
import com.nepxion.discovery.plugin.framework.generator.GitGenerator;
import com.nepxion.discovery.plugin.framework.generator.GroupGenerator;
import com.nepxion.discovery.plugin.framework.listener.discovery.DiscoveryListenerExecutor;
import com.nepxion.discovery.plugin.framework.listener.discovery.HostFilterDiscoveryListener;
import com.nepxion.discovery.plugin.framework.listener.discovery.RegionFilterDiscoveryListener;
import com.nepxion.discovery.plugin.framework.listener.discovery.VersionFilterDiscoveryListener;
import com.nepxion.discovery.plugin.framework.listener.loadbalance.HostFilterLoadBalanceListener;
import com.nepxion.discovery.plugin.framework.listener.loadbalance.LoadBalanceListenerExecutor;
import com.nepxion.discovery.plugin.framework.listener.loadbalance.NotificationLoadBalanceListener;
import com.nepxion.discovery.plugin.framework.listener.loadbalance.RegionFilterLoadBalanceListener;
import com.nepxion.discovery.plugin.framework.listener.loadbalance.VersionFilterLoadBalanceListener;
import com.nepxion.discovery.plugin.framework.listener.register.CountFilterRegisterListener;
import com.nepxion.discovery.plugin.framework.listener.register.HostFilterRegisterListener;
import com.nepxion.discovery.plugin.framework.listener.register.RegisterListenerExecutor;
import com.nepxion.discovery.plugin.framework.loadbalance.weight.ArrayWeightRandomProcessor;
import com.nepxion.discovery.plugin.framework.loadbalance.weight.MapWeightRandomProcessor;
import com.nepxion.discovery.plugin.framework.loadbalance.weight.RuleArrayWeightRandomLoadBalance;
import com.nepxion.discovery.plugin.framework.loadbalance.weight.RuleMapWeightRandomLoadBalance;
import com.nepxion.discovery.plugin.framework.loadbalance.weight.RuleWeightRandomLoadBalance;
import com.nepxion.discovery.plugin.framework.loadbalance.weight.StrategyArrayWeightRandomLoadBalance;
import com.nepxion.discovery.plugin.framework.loadbalance.weight.StrategyMapWeightRandomLoadBalance;
import com.nepxion.discovery.plugin.framework.loadbalance.weight.StrategyWeightRandomLoadBalance;
import com.nepxion.discovery.plugin.framework.loadbalance.weight.WeightRandomProcessor;
import com.nepxion.eventbus.annotation.EnableEventBus;
@Configuration
@EnableEventBus
public class PluginAutoConfiguration {
@Value("${" + DiscoveryConstant.SPRING_APPLICATION_WEIGHT_RANDOM_TYPE + ":" + DiscoveryConstant.MAP_WEIGHT_RANDOM + "}")
private String weightRandomType;
@Bean
@LoadBalanced
public RestTemplate pluginRestTemplate() {
return new RestTemplate();
}
@Bean
public PluginContextAware pluginContextAware() {
return new PluginContextAware();
}
@Bean
public PluginPublisher pluginPublisher() {
return new PluginPublisher();
}
@Bean
public PluginSubscriber pluginSubscriber() {
return new PluginSubscriber();
}
@Bean
public PluginEventWapper pluginEventWapper() {
return new PluginEventWapper();
}
@Bean
public PluginCache pluginCache() {
return new PluginCache();
}
@Bean
public RuleCache ruleCache() {
return new RuleCache();
}
@Bean
@ConditionalOnMissingBean
public RuleWeightRandomLoadBalance ruleWeightRandomLoadBalance(PluginAdapter pluginAdapter) {
WeightRandomType type = WeightRandomType.fromString(weightRandomType);
switch (type) {
case MAP_WEIGHT_RANDOM:
return new RuleMapWeightRandomLoadBalance(pluginAdapter);
case ARRAY_WEIGHT_RANDOM:
return new RuleArrayWeightRandomLoadBalance(pluginAdapter);
}
return null;
}
@Bean
@ConditionalOnMissingBean
public StrategyWeightRandomLoadBalance strategyWeightRandomLoadBalance(PluginAdapter pluginAdapter, @Autowired(required = false) PluginContextHolder pluginContextHolder) {
WeightRandomType type = WeightRandomType.fromString(weightRandomType);
switch (type) {
case MAP_WEIGHT_RANDOM:
return new StrategyMapWeightRandomLoadBalance(pluginAdapter, pluginContextHolder);
case ARRAY_WEIGHT_RANDOM:
return new StrategyArrayWeightRandomLoadBalance(pluginAdapter, pluginContextHolder);
}
return null;
}
@Bean
@ConditionalOnMissingBean
public WeightRandomProcessor strategyWeightRandomProcessor() {
WeightRandomType type = WeightRandomType.fromString(weightRandomType);
switch (type) {
case MAP_WEIGHT_RANDOM:
return new MapWeightRandomProcessor();
case ARRAY_WEIGHT_RANDOM:
return new ArrayWeightRandomProcessor();
}
return null;
}
@Bean
public RegisterListenerExecutor registerListenerExecutor() {
return new RegisterListenerExecutor();
}
@Bean
public DiscoveryListenerExecutor discoveryListenerExecutor() {
return new DiscoveryListenerExecutor();
}
@Bean
public LoadBalanceListenerExecutor loadBalanceListenerExecutor() {
return new LoadBalanceListenerExecutor();
}
@Bean
@ConditionalOnMissingBean
public HostFilterRegisterListener hostFilterRegisterListener() {
return new HostFilterRegisterListener();
}
@Bean
@ConditionalOnMissingBean
public CountFilterRegisterListener countFilterRegisterListener() {
return new CountFilterRegisterListener();
}
@Bean
@ConditionalOnMissingBean
public HostFilterDiscoveryListener hostFilterDiscoveryListener() {
return new HostFilterDiscoveryListener();
}
@Bean
@ConditionalOnMissingBean
public VersionFilterDiscoveryListener versionFilterDiscoveryListener() {
return new VersionFilterDiscoveryListener();
}
@Bean
@ConditionalOnMissingBean
public RegionFilterDiscoveryListener regionFilterDiscoveryListener() {
return new RegionFilterDiscoveryListener();
}
@Bean
@ConditionalOnMissingBean
public HostFilterLoadBalanceListener hostFilterLoadBalanceListener() {
return new HostFilterLoadBalanceListener();
}
@Bean
@ConditionalOnMissingBean
public VersionFilterLoadBalanceListener versionFilterLoadBalanceListener() {
return new VersionFilterLoadBalanceListener();
}
@Bean
@ConditionalOnMissingBean
public RegionFilterLoadBalanceListener regionFilterLoadBalanceListener() {
return new RegionFilterLoadBalanceListener();
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(value = DiscoveryConstant.SPRING_APPLICATION_NO_SERVERS_NOTIFY_ENABLED, matchIfMissing = false)
public NotificationLoadBalanceListener notificationLoadBalanceListener() {
return new NotificationLoadBalanceListener();
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(value = DiscoveryConstant.SPRING_APPLICATION_GROUP_GENERATOR_ENABLED, matchIfMissing = false)
public GroupGenerator groupGenerator() {
return new GroupGenerator();
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(value = DiscoveryConstant.SPRING_APPLICATION_GIT_GENERATOR_ENABLED, matchIfMissing = false)
public GitGenerator gitGenerator() {
return new GitGenerator();
}
}