diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/RasRepositoryHolder.java b/client/src/main/java/cn/icanci/loopstack/ras/client/holder/RasRepositoryHolder.java index a419d692ab9d5095ed753eeab0da633fd9903eb5..b95ad72c16f3858f7cc8d4fd5245ac319e35f4b9 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/RasRepositoryHolder.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/holder/RasRepositoryHolder.java @@ -6,6 +6,7 @@ import cn.icanci.loopstack.api.client.Client; import cn.icanci.loopstack.api.client.http.HttpClientImpl; import cn.icanci.loopstack.lsi.common.result.R; import cn.icanci.loopstack.ras.client.exception.ServerApplicationWrongfulException; +import cn.icanci.loopstack.ras.client.exception.ServiceNotFoundException; import cn.icanci.loopstack.ras.client.holder.model.ApplicationKey; import cn.icanci.loopstack.ras.client.holder.model.ApplicationValue; import cn.icanci.loopstack.ras.client.holder.model.ClientApplicationValue; @@ -279,7 +280,9 @@ public class RasRepositoryHolder implements InitializingBean { } private void initClientLoadBalance() { - + // 构建key + // 构建算子逻辑 + // 构建蚁群算法 } /** @@ -290,7 +293,11 @@ public class RasRepositoryHolder implements InitializingBean { */ public String routingRequestAddress(String appId) { // REQUEST_FORMAT - + ClientApplicationValue clientApplicationValue = CLIENT_APPLICATION_MAP.get(appId); + if (clientApplicationValue == null) { + throw new ServiceNotFoundException("Service for appId: " + appId + " not found!"); + } + return null; } } diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/FirstLoadBalancing.java b/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/FirstLoadBalancing.java new file mode 100644 index 0000000000000000000000000000000000000000..969749caf74df50e78ec2582998c283a2c774ead --- /dev/null +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/FirstLoadBalancing.java @@ -0,0 +1,31 @@ +package cn.icanci.loopstack.ras.client.holder.loadbalancing; + +import cn.icanci.loopstack.ras.client.holder.model.ApplicationValue; +import cn.icanci.loopstack.ras.client.holder.model.ClientApplicationValue; +import cn.icanci.loopstack.ras.common.enums.LoadBalanceTypeEnum; + +import java.util.Optional; +import java.util.Set; + +import org.springframework.stereotype.Service; + +/** + * 负载均衡算法实现 + * + * @author icanci + * @since 1.0 Created in 2023/01/23 10:23 + */ +@Service +@LoadBalancingBean(LoadBalanceTypeEnum.FIRST) +public class FirstLoadBalancing extends LoadBalancingCache implements LoadBalancing { + + @Override + public Optional route(ClientApplicationValue clientApplicationValue) { + if (clientApplicationValue == null) { + return Optional.empty(); + } + Set applicationValues = clientApplicationValue.getApplicationValues(); + + return null; + } +} diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancing.java b/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancing.java new file mode 100644 index 0000000000000000000000000000000000000000..6698aecbf0106d113884d2827113d0a440bcdb06 --- /dev/null +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancing.java @@ -0,0 +1,22 @@ +package cn.icanci.loopstack.ras.client.holder.loadbalancing; + +import cn.icanci.loopstack.ras.client.holder.model.ApplicationValue; +import cn.icanci.loopstack.ras.client.holder.model.ClientApplicationValue; + +import java.util.Optional; + +/** + * 负载均衡算法实现 + * + * @author icanci + * @since 1.0 Created in 2023/01/23 10:23 + */ +public interface LoadBalancing { + /** + * 根据AppId路由到合适的 + * + * @param clientApplicationValue 客户端服务值 + * @return 返回目标实现 + */ + Optional route(ClientApplicationValue clientApplicationValue); +} diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingBean.java b/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingBean.java new file mode 100644 index 0000000000000000000000000000000000000000..8b8e8f9737cb6cf618fc607723f54c25e98a6137 --- /dev/null +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingBean.java @@ -0,0 +1,23 @@ +package cn.icanci.loopstack.ras.client.holder.loadbalancing; + +import cn.icanci.loopstack.ras.common.enums.LoadBalanceTypeEnum; + +import java.lang.annotation.*; + +/** + * 负载均衡标记tag + * + * @author icanci + * @since 1.0 Created in 2023/01/23 10:26 + */ +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface LoadBalancingBean { + /** + * 负载均衡实现 + * + * @return LoadBalanceTypeEnum + */ + LoadBalanceTypeEnum value(); +} diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingCache.java b/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingCache.java new file mode 100644 index 0000000000000000000000000000000000000000..3084a42968ff5ead8617e3a9190c8873968ca46b --- /dev/null +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingCache.java @@ -0,0 +1,13 @@ +package cn.icanci.loopstack.ras.client.holder.loadbalancing; + +/** + * 负载均衡缓存 + * - 存储执行的过程和结果 + * - 缓存分为2种,一种是元数据缓存,一种是执行过程缓存 + * + * @author icanci + * @since 1.0 Created in 2023/01/23 10:24 + */ +public abstract class LoadBalancingCache { + +}