From 61d99e47c5f983b87656ae84717ef92dbc651b21 Mon Sep 17 00:00:00 2001 From: wind Date: Thu, 6 Jul 2023 23:33:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=E8=B4=9F=E8=BD=BD?= =?UTF-8?q?=E5=9D=87=E8=A1=A1=E5=99=A8=E5=8F=AF=E5=AD=98=E5=9C=A8=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=20=E6=B7=BB=E5=8A=A0=EF=BC=9Aspring=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E4=B8=8Bbean=E6=B3=A8=E5=85=A5=E5=90=8E=E5=88=99=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=88=B0=E9=85=8D=E7=BD=AE=E5=B7=A5=E5=8E=82=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E6=B7=BB=E5=8A=A0=E8=87=B3=E8=B4=9F=E8=BD=BD=E5=9D=87?= =?UTF-8?q?=E8=A1=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sms4j/core/factory/SmsFactory.java | 10 ++++++++++ .../org/dromara/sms4j/core/load/SmsLoad.java | 20 ++++++++++++++----- .../starter/config/SmsAutowiredConfig.java | 7 +++++++ .../sms4j/starter/config/SupplierConfig.java | 7 ++----- .../sms4j/starter/utils/SmsSpringUtil.java | 2 +- 5 files changed, 35 insertions(+), 11 deletions(-) diff --git a/sms4j-core/src/main/java/org/dromara/sms4j/core/factory/SmsFactory.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/factory/SmsFactory.java index a653143e..69f30be6 100644 --- a/sms4j-core/src/main/java/org/dromara/sms4j/core/factory/SmsFactory.java +++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/factory/SmsFactory.java @@ -5,6 +5,7 @@ import org.dromara.sms4j.api.smsProxy.SmsInvocationHandler; import org.dromara.sms4j.api.universal.SupplierConfig; import org.dromara.sms4j.comm.factory.BeanFactory; 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.enumerate.SupplierType; @@ -53,6 +54,15 @@ public abstract class SmsFactory { return providerFactory.createMultitonSms(config); } + /** + * createSmsBlend + *

获取负载均衡器中的短信实例 + * @author :Wind + */ + public static SmsBlend createSmsBlend(){ + return SmsLoad.getBeanLoad().getLoadServer(); + } + /** * refresh *

刷新配置,用于切换配置后的刷新,防止因厂商sdk内部的保存导致配置更新不及时 diff --git a/sms4j-core/src/main/java/org/dromara/sms4j/core/load/SmsLoad.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/load/SmsLoad.java index aa7a9d97..8255550e 100644 --- a/sms4j-core/src/main/java/org/dromara/sms4j/core/load/SmsLoad.java +++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/load/SmsLoad.java @@ -21,14 +21,20 @@ import java.util.Map; **/ public class SmsLoad { // 服务器列表,每个服务器有一个权重和当前权重 - private static final List LoadServers = new ArrayList<>(); + private final List LoadServers = new ArrayList<>(); // 实例列表 private static final Map smsBlendMap = new HashMap<>(); + private static final SmsLoad smsLoad = new SmsLoad(); + private SmsLoad() { } + public static SmsLoad newSmsLoad() { + return new SmsLoad(); + } + /** * addLoadServer *

添加服务及其权重 @@ -37,7 +43,7 @@ public class SmsLoad { * @param weight 权重 * @author :Wind */ - public static void addLoadServer(SmsBlend LoadServer, int weight) { + public void addLoadServer(SmsBlend LoadServer, int weight) { LoadServers.add(new LoadServer(LoadServer, weight, weight)); } @@ -47,7 +53,7 @@ public class SmsLoad { * @param LoadServer 要移除的服务 * @author :Wind */ - public static void removeLoadServer(SmsBlend LoadServer) { + public void removeLoadServer(SmsBlend LoadServer) { for (int i = 0; i < LoadServers.size(); i++) { if (LoadServers.get(i).getSmsServer().equals(LoadServer)) { LoadServers.remove(i); @@ -62,7 +68,7 @@ public class SmsLoad { * @return SmsBlend 短信实现 * @author :Wind */ - public synchronized static SmsBlend getLoadServer() { + public synchronized SmsBlend getLoadServer() { int totalWeight = 0; LoadServer selectedLoadServer = null; // 计算所有服务器的权重总和,并选择当前权重最大的服务器 @@ -94,7 +100,11 @@ public class SmsLoad { public static void starConfig(SupplierConfig supplierConfig, SupplierType supplierType){ BaseProviderFactory providerFactory = supplierType.getProviderFactory(); 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; } } diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsAutowiredConfig.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsAutowiredConfig.java index 556e8ebc..be5513d1 100644 --- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsAutowiredConfig.java +++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsAutowiredConfig.java @@ -10,6 +10,7 @@ import org.dromara.sms4j.comm.constant.Constant; import org.dromara.sms4j.comm.delayedTime.DelayedTime; import org.dromara.sms4j.comm.factory.BeanFactory; 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.utils.ConfigUtil; import org.dromara.sms4j.starter.utils.SmsRedisUtils; @@ -25,6 +26,7 @@ import org.springframework.data.redis.connection.RedisConnectionFactory; import javax.annotation.PostConstruct; import javax.sql.DataSource; import java.sql.SQLException; +import java.util.Map; import java.util.Objects; import java.util.concurrent.Executor; @@ -95,6 +97,11 @@ public class SmsAutowiredConfig { SmsInvocationHandler.setRestrictedProcess(new RestrictedProcessImpl()); log.debug("The redis cache is enabled for sms4j"); } + // 将spring中存在的所有配置,设置到配置工厂,并添加至负载均衡器 + Map beansOfType = SmsSpringUtil.getBeansOfType(org.dromara.sms4j.api.universal.SupplierConfig.class); + for (org.dromara.sms4j.api.universal.SupplierConfig s : beansOfType.values()) { + SupplierFactory.setSupplierConfig(s); + } //打印banner if (BeanFactory.getSmsConfig().getIsPrint()){ SmsBanner.PrintBanner(Constant.VERSION); diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java index 9e0c6428..6f7d3700 100644 --- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java +++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java @@ -8,6 +8,7 @@ import org.dromara.sms4j.emay.config.EmayConfig; import org.dromara.sms4j.huawei.config.HuaweiConfig; import org.dromara.sms4j.jdcloud.config.JdCloudConfig; 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.unisms.config.UniConfig; 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 javax.annotation.PostConstruct; +import java.util.Map; public class SupplierConfig { @@ -117,9 +119,4 @@ public class SupplierConfig { protected ZhutongConfig zhutongConfig(){ return SupplierFactory.getZhutongConfig(); } - - @PostConstruct - protected void init(){ - - } } diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SmsSpringUtil.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SmsSpringUtil.java index 50989b82..53779d98 100644 --- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SmsSpringUtil.java +++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/utils/SmsSpringUtil.java @@ -102,7 +102,7 @@ public class SmsSpringUtil implements ApplicationContextAware { return !applicationContext.getBeansOfType(interfaceType).isEmpty(); } - public Map getBeansOfType(Class interfaceType) { + public static Map getBeansOfType(Class interfaceType) { return applicationContext.getBeansOfType(interfaceType); } }