mirror of
https://gitee.com/dromara/sms4j.git
synced 2025-12-06 17:08:40 +08:00
修改:负载均衡器可存在多个
添加:spring模式下bean注入后则设置到配置工厂,并添加至负载均衡器
This commit is contained in:
parent
61336f3145
commit
61d99e47c5
@ -5,6 +5,7 @@ import org.dromara.sms4j.api.smsProxy.SmsInvocationHandler;
|
|||||||
import org.dromara.sms4j.api.universal.SupplierConfig;
|
import org.dromara.sms4j.api.universal.SupplierConfig;
|
||||||
import org.dromara.sms4j.comm.factory.BeanFactory;
|
import org.dromara.sms4j.comm.factory.BeanFactory;
|
||||||
import org.dromara.sms4j.core.SupplierSqlConfig;
|
import org.dromara.sms4j.core.SupplierSqlConfig;
|
||||||
|
import org.dromara.sms4j.core.load.SmsLoad;
|
||||||
import org.dromara.sms4j.provider.base.BaseProviderFactory;
|
import org.dromara.sms4j.provider.base.BaseProviderFactory;
|
||||||
import org.dromara.sms4j.provider.enumerate.SupplierType;
|
import org.dromara.sms4j.provider.enumerate.SupplierType;
|
||||||
|
|
||||||
@ -53,6 +54,15 @@ public abstract class SmsFactory {
|
|||||||
return providerFactory.createMultitonSms(config);
|
return providerFactory.createMultitonSms(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* createSmsBlend
|
||||||
|
* <p>获取负载均衡器中的短信实例
|
||||||
|
* @author :Wind
|
||||||
|
*/
|
||||||
|
public static SmsBlend createSmsBlend(){
|
||||||
|
return SmsLoad.getBeanLoad().getLoadServer();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* refresh
|
* refresh
|
||||||
* <p>刷新配置,用于切换配置后的刷新,防止因厂商sdk内部的保存导致配置更新不及时
|
* <p>刷新配置,用于切换配置后的刷新,防止因厂商sdk内部的保存导致配置更新不及时
|
||||||
|
|||||||
@ -21,14 +21,20 @@ import java.util.Map;
|
|||||||
**/
|
**/
|
||||||
public class SmsLoad {
|
public class SmsLoad {
|
||||||
// 服务器列表,每个服务器有一个权重和当前权重
|
// 服务器列表,每个服务器有一个权重和当前权重
|
||||||
private static final List<LoadServer> LoadServers = new ArrayList<>();
|
private final List<LoadServer> LoadServers = new ArrayList<>();
|
||||||
|
|
||||||
// 实例列表
|
// 实例列表
|
||||||
private static final Map<Object, SmsBlend> smsBlendMap = new HashMap<>();
|
private static final Map<Object, SmsBlend> smsBlendMap = new HashMap<>();
|
||||||
|
|
||||||
|
private static final SmsLoad smsLoad = new SmsLoad();
|
||||||
|
|
||||||
private SmsLoad() {
|
private SmsLoad() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static SmsLoad newSmsLoad() {
|
||||||
|
return new SmsLoad();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* addLoadServer
|
* addLoadServer
|
||||||
* <p> 添加服务及其权重
|
* <p> 添加服务及其权重
|
||||||
@ -37,7 +43,7 @@ public class SmsLoad {
|
|||||||
* @param weight 权重
|
* @param weight 权重
|
||||||
* @author :Wind
|
* @author :Wind
|
||||||
*/
|
*/
|
||||||
public static void addLoadServer(SmsBlend LoadServer, int weight) {
|
public void addLoadServer(SmsBlend LoadServer, int weight) {
|
||||||
LoadServers.add(new LoadServer(LoadServer, weight, weight));
|
LoadServers.add(new LoadServer(LoadServer, weight, weight));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +53,7 @@ public class SmsLoad {
|
|||||||
* @param LoadServer 要移除的服务
|
* @param LoadServer 要移除的服务
|
||||||
* @author :Wind
|
* @author :Wind
|
||||||
*/
|
*/
|
||||||
public static void removeLoadServer(SmsBlend LoadServer) {
|
public void removeLoadServer(SmsBlend LoadServer) {
|
||||||
for (int i = 0; i < LoadServers.size(); i++) {
|
for (int i = 0; i < LoadServers.size(); i++) {
|
||||||
if (LoadServers.get(i).getSmsServer().equals(LoadServer)) {
|
if (LoadServers.get(i).getSmsServer().equals(LoadServer)) {
|
||||||
LoadServers.remove(i);
|
LoadServers.remove(i);
|
||||||
@ -62,7 +68,7 @@ public class SmsLoad {
|
|||||||
* @return SmsBlend 短信实现
|
* @return SmsBlend 短信实现
|
||||||
* @author :Wind
|
* @author :Wind
|
||||||
*/
|
*/
|
||||||
public synchronized static SmsBlend getLoadServer() {
|
public synchronized SmsBlend getLoadServer() {
|
||||||
int totalWeight = 0;
|
int totalWeight = 0;
|
||||||
LoadServer selectedLoadServer = null;
|
LoadServer selectedLoadServer = null;
|
||||||
// 计算所有服务器的权重总和,并选择当前权重最大的服务器
|
// 计算所有服务器的权重总和,并选择当前权重最大的服务器
|
||||||
@ -94,7 +100,11 @@ public class SmsLoad {
|
|||||||
public static void starConfig(SupplierConfig supplierConfig, SupplierType supplierType){
|
public static void starConfig(SupplierConfig supplierConfig, SupplierType supplierType){
|
||||||
BaseProviderFactory providerFactory = supplierType.getProviderFactory();
|
BaseProviderFactory providerFactory = supplierType.getProviderFactory();
|
||||||
SmsBlend smsBlend = providerFactory.createMultitonSms(supplierConfig);
|
SmsBlend smsBlend = providerFactory.createMultitonSms(supplierConfig);
|
||||||
addLoadServer(smsBlend, Integer.parseInt(ReflectUtil.getValues(supplierConfig).get("weight")));
|
smsLoad.addLoadServer(smsBlend, Integer.parseInt(ReflectUtil.getValues(supplierConfig).get("weight")));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SmsLoad getBeanLoad(){
|
||||||
|
return smsLoad;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import org.dromara.sms4j.comm.constant.Constant;
|
|||||||
import org.dromara.sms4j.comm.delayedTime.DelayedTime;
|
import org.dromara.sms4j.comm.delayedTime.DelayedTime;
|
||||||
import org.dromara.sms4j.comm.factory.BeanFactory;
|
import org.dromara.sms4j.comm.factory.BeanFactory;
|
||||||
import org.dromara.sms4j.core.SupplierSqlConfig;
|
import org.dromara.sms4j.core.SupplierSqlConfig;
|
||||||
|
import org.dromara.sms4j.core.config.SupplierFactory;
|
||||||
import org.dromara.sms4j.starter.aop.RestrictedProcessImpl;
|
import org.dromara.sms4j.starter.aop.RestrictedProcessImpl;
|
||||||
import org.dromara.sms4j.starter.utils.ConfigUtil;
|
import org.dromara.sms4j.starter.utils.ConfigUtil;
|
||||||
import org.dromara.sms4j.starter.utils.SmsRedisUtils;
|
import org.dromara.sms4j.starter.utils.SmsRedisUtils;
|
||||||
@ -25,6 +26,7 @@ import org.springframework.data.redis.connection.RedisConnectionFactory;
|
|||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
@ -95,6 +97,11 @@ public class SmsAutowiredConfig {
|
|||||||
SmsInvocationHandler.setRestrictedProcess(new RestrictedProcessImpl());
|
SmsInvocationHandler.setRestrictedProcess(new RestrictedProcessImpl());
|
||||||
log.debug("The redis cache is enabled for sms4j");
|
log.debug("The redis cache is enabled for sms4j");
|
||||||
}
|
}
|
||||||
|
// 将spring中存在的所有配置,设置到配置工厂,并添加至负载均衡器
|
||||||
|
Map<String, org.dromara.sms4j.api.universal.SupplierConfig> beansOfType = SmsSpringUtil.getBeansOfType(org.dromara.sms4j.api.universal.SupplierConfig.class);
|
||||||
|
for (org.dromara.sms4j.api.universal.SupplierConfig s : beansOfType.values()) {
|
||||||
|
SupplierFactory.setSupplierConfig(s);
|
||||||
|
}
|
||||||
//打印banner
|
//打印banner
|
||||||
if (BeanFactory.getSmsConfig().getIsPrint()){
|
if (BeanFactory.getSmsConfig().getIsPrint()){
|
||||||
SmsBanner.PrintBanner(Constant.VERSION);
|
SmsBanner.PrintBanner(Constant.VERSION);
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import org.dromara.sms4j.emay.config.EmayConfig;
|
|||||||
import org.dromara.sms4j.huawei.config.HuaweiConfig;
|
import org.dromara.sms4j.huawei.config.HuaweiConfig;
|
||||||
import org.dromara.sms4j.jdcloud.config.JdCloudConfig;
|
import org.dromara.sms4j.jdcloud.config.JdCloudConfig;
|
||||||
import org.dromara.sms4j.netease.config.NeteaseConfig;
|
import org.dromara.sms4j.netease.config.NeteaseConfig;
|
||||||
|
import org.dromara.sms4j.starter.utils.SmsSpringUtil;
|
||||||
import org.dromara.sms4j.tencent.config.TencentConfig;
|
import org.dromara.sms4j.tencent.config.TencentConfig;
|
||||||
import org.dromara.sms4j.unisms.config.UniConfig;
|
import org.dromara.sms4j.unisms.config.UniConfig;
|
||||||
import org.dromara.sms4j.yunpian.config.YunpianConfig;
|
import org.dromara.sms4j.yunpian.config.YunpianConfig;
|
||||||
@ -17,6 +18,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
|
|||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class SupplierConfig {
|
public class SupplierConfig {
|
||||||
|
|
||||||
@ -117,9 +119,4 @@ public class SupplierConfig {
|
|||||||
protected ZhutongConfig zhutongConfig(){
|
protected ZhutongConfig zhutongConfig(){
|
||||||
return SupplierFactory.getZhutongConfig();
|
return SupplierFactory.getZhutongConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostConstruct
|
|
||||||
protected void init(){
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -102,7 +102,7 @@ public class SmsSpringUtil implements ApplicationContextAware {
|
|||||||
return !applicationContext.getBeansOfType(interfaceType).isEmpty();
|
return !applicationContext.getBeansOfType(interfaceType).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> Map<String, T> getBeansOfType(Class<T> interfaceType) {
|
public static <T> Map<String, T> getBeansOfType(Class<T> interfaceType) {
|
||||||
return applicationContext.getBeansOfType(interfaceType);
|
return applicationContext.getBeansOfType(interfaceType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user