availableResources = params.getAvailableResources(),
+ invokedResources = null == params.getInvokedResources()
+ ? Collections.emptyList() : params.getInvokedResources();
+ if (invokedResources.size() < availableResources.size()) {
+ return new SimpleResource(availableResources.get(invokedResources.size()));
+ }
+
+ final String lastInvokedResource = invokedResources.get(invokedResources.size() - 1);
+ final int i = availableResources.indexOf(lastInvokedResource);
+ if (i < (availableResources.size() - 1)) {
+ return YopSentinelMetricsHelper.findCurrentBlockResource(availableResources.get(i + 1));
+ } else {
+ return YopSentinelMetricsHelper.findCurrentBlockResource(availableResources.get(0));
+ }
+ }
+}
diff --git a/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/policy/BaseRouterPolicy.java b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/policy/BaseRouterPolicy.java
new file mode 100644
index 00000000..d2c864d5
--- /dev/null
+++ b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/policy/BaseRouterPolicy.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ */
+package com.yeepay.yop.sdk.router.policy;
+
+import com.yeepay.yop.sdk.exception.YopClientException;
+import com.yeepay.yop.sdk.invoke.RouterPolicy;
+import com.yeepay.yop.sdk.invoke.model.RouterParams;
+
+/**
+ * title:
+ * description: 描述
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ *
+ * @author wdc
+ * @version 1.0.0
+ * @since 2024/4/1
+ */
+public abstract class BaseRouterPolicy implements RouterPolicy {
+
+ @Override
+ public String name() {
+ return this.getClass().getCanonicalName();
+ }
+
+ protected void validateParams(RouterParams params) {
+ if (null == params.getResourceGroup()) {
+ throw new YopClientException("ConfigProblem, resource group is not specified");
+ }
+ if (null == params.getAvailableResources() || params.getAvailableResources().isEmpty()) {
+ throw new YopClientException("ConfigProblem, no available resource is specified");
+ }
+ if (null != params.getInvokedResources()) {
+ for (String invokedResource : params.getInvokedResources()) {
+ if (!params.getAvailableResources().contains(invokedResource)) {
+ throw new YopClientException("ConfigProblem, invoked resource is not belong to the available resource");
+ }
+ }
+ }
+ }
+
+
+}
diff --git a/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/policy/RouterPolicyFactory.java b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/policy/RouterPolicyFactory.java
new file mode 100644
index 00000000..02ab0bd5
--- /dev/null
+++ b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/policy/RouterPolicyFactory.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ */
+package com.yeepay.yop.sdk.router.policy;
+
+import com.google.common.collect.Maps;
+import com.yeepay.yop.sdk.exception.YopClientException;
+import com.yeepay.yop.sdk.invoke.RouterPolicy;
+
+import java.util.Map;
+import java.util.ServiceLoader;
+
+/**
+ * title: 路由策略工厂
+ * description: 描述
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ *
+ * @author wdc
+ * @version 1.0.0
+ * @since 2024/4/1
+ */
+public class RouterPolicyFactory {
+
+ /**
+ * 路由策略Map
+ *
+ * key: 路由策略名称
+ * value: 路由策略
+ */
+ private static final Map SERVICE_MAP = Maps.newHashMap();
+
+ static {
+ ServiceLoader serviceLoader = ServiceLoader.load(RouterPolicy.class);
+ for (RouterPolicy item : serviceLoader) {
+ SERVICE_MAP.put(item.name(), item);
+ }
+ }
+
+ /**
+ * 扩展路由策略
+ *
+ * @param name 路由策略名称
+ * @param item 路由策略
+ */
+ public static void register(String name, RouterPolicy item) {
+ SERVICE_MAP.put(name, item);
+ }
+
+ /**
+ * 根据路由策略名称获取路由策略
+ *
+ * @param name 路由策略名称
+ * @return 路由策略
+ */
+ public static RouterPolicy get(String name) {
+ final RouterPolicy routerPolicy = SERVICE_MAP.get(name);
+ if (null == routerPolicy) {
+ throw new YopClientException("ConfigProblem, RouterPolicy NotFound, name:" + name);
+ }
+ return routerPolicy;
+ }
+
+}
diff --git a/yop-java-sdk-base/src/main/java/com/yeepay/yop/sdk/base/cache/YopDegradeRuleHelper.java b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopDegradeRuleHelper.java
similarity index 74%
rename from yop-java-sdk-base/src/main/java/com/yeepay/yop/sdk/base/cache/YopDegradeRuleHelper.java
rename to yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopDegradeRuleHelper.java
index 26929d81..bc8b53a0 100644
--- a/yop-java-sdk-base/src/main/java/com/yeepay/yop/sdk/base/cache/YopDegradeRuleHelper.java
+++ b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopDegradeRuleHelper.java
@@ -2,22 +2,24 @@
* Copyright: Copyright (c)2014
* Company: 易宝支付(YeePay)
*/
-package com.yeepay.yop.sdk.base.cache;
+package com.yeepay.yop.sdk.router.sentinel;
-import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
-import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
-import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreakerStrategy;
import com.google.common.collect.Sets;
-import com.yeepay.yop.sdk.YopConstants;
import com.yeepay.yop.sdk.config.provider.file.YopCircuitBreakerConfig;
import com.yeepay.yop.sdk.config.provider.file.YopCircuitBreakerRuleConfig;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreakerStrategy;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -38,6 +40,47 @@ public class YopDegradeRuleHelper {
private static final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
+
+
+ /**
+ * 初始化降级配置
+ *
+ * @param circuitBreakerConfigMap 降级规则Map<资源标识,熔断规则列表>
+ */
+ public static void initDegradeRule(Map circuitBreakerConfigMap) {
+ if (initialized) {
+ return;
+ }
+
+ synchronized (YopDegradeRuleHelper.class) {
+ if (initialized) {
+ return;
+ }
+
+ if (MapUtils.isEmpty(circuitBreakerConfigMap)) {
+ LOGGER.warn("Empty DegradeRule, Please Check Your Config And Try Again");
+ initialized = true;
+ return;
+ }
+
+ Set allRules = Sets.newHashSet();
+ circuitBreakerConfigMap.forEach((resource, circuitBreakerConfig) -> {
+ if (StringUtils.isBlank(resource) || null == circuitBreakerConfig
+ || !circuitBreakerConfig.isEnable() || CollectionUtils.isEmpty(circuitBreakerConfig.getRules())
+ || DegradeRuleManager.hasConfig(resource)) {
+ return;
+ }
+ allRules.addAll(initDegradeRuleForResource(resource, circuitBreakerConfig));
+ });
+
+ if (CollectionUtils.isNotEmpty(allRules)) {
+ DegradeRuleManager.loadRules(new ArrayList<>(allRules));
+ }
+ initialized = true;
+ LOGGER.info("DegradeRule Inited, rules:{}", allRules);
+ }
+ }
+
/**
* 初始化降级配置
*
@@ -133,7 +176,7 @@ public static boolean addDegradeRule(String resource, YopCircuitBreakerConfig ci
Set rules = initDegradeRuleForResource(resource, circuitBreakerConfig);
boolean ruleAdded = updateRulesForResource(resource, rules, false);
- if (YopConstants.SDK_DEBUG && ruleAdded) {
+ if (YopSentinelConstants.SDK_ROUTER_SENTINEL_DEBUG && ruleAdded) {
LOGGER.info("DegradeRule Added, rules:{}", rules);
}
return ruleAdded;
@@ -152,7 +195,7 @@ public static boolean updateDegradeRule(String resource, YopCircuitBreakerConfig
Set rules = initDegradeRuleForResource(resource, circuitBreakerConfig);
boolean ruleUpdated = updateRulesForResource(resource, rules, true);
- if (YopConstants.SDK_DEBUG && ruleUpdated) {
+ if (YopSentinelConstants.SDK_ROUTER_SENTINEL_DEBUG && ruleUpdated) {
LOGGER.info("DegradeRule Updated, rules:{}", rules);
}
return ruleUpdated;
@@ -199,7 +242,7 @@ public static boolean removeDegradeRule(String resource) {
}
final boolean ruleRemoved = updateRulesForResource(resource, null, true);
- if (YopConstants.SDK_DEBUG && ruleRemoved) {
+ if (YopSentinelConstants.SDK_ROUTER_SENTINEL_DEBUG && ruleRemoved) {
LOGGER.info("DegradeRule Removed, resource:{}", resource);
}
return ruleRemoved;
diff --git a/yop-java-sdk-base/src/main/java/com/yeepay/yop/sdk/sentinel/YopEntry.java b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopEntry.java
similarity index 83%
rename from yop-java-sdk-base/src/main/java/com/yeepay/yop/sdk/sentinel/YopEntry.java
rename to yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopEntry.java
index e5d56c49..0d6b5354 100644
--- a/yop-java-sdk-base/src/main/java/com/yeepay/yop/sdk/sentinel/YopEntry.java
+++ b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopEntry.java
@@ -2,23 +2,23 @@
* Copyright: Copyright (c)2014
* Company: 易宝支付(YeePay)
*/
-package com.yeepay.yop.sdk.sentinel;
-
-import com.alibaba.csp.sentinel.Entry;
-import com.alibaba.csp.sentinel.ErrorEntryFreeException;
-import com.alibaba.csp.sentinel.context.Context;
-import com.alibaba.csp.sentinel.context.ContextUtil;
-import com.alibaba.csp.sentinel.context.NullContext;
-import com.alibaba.csp.sentinel.log.RecordLog;
-import com.alibaba.csp.sentinel.node.Node;
-import com.alibaba.csp.sentinel.slotchain.ProcessorSlot;
-import com.alibaba.csp.sentinel.slotchain.ResourceWrapper;
-import com.alibaba.csp.sentinel.util.function.BiConsumer;
+package com.yeepay.yop.sdk.router.sentinel;
+
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.Entry;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.ErrorEntryFreeException;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.context.Context;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.context.ContextUtil;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.context.NullContext;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.log.RecordLog;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.node.Node;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.slotchain.ProcessorSlot;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.slotchain.ResourceWrapper;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.util.function.BiConsumer;
import java.util.LinkedList;
/**
- * title:
+ * title: Yop定制-适配YopSph
* description: 描述
* Copyright: Copyright (c)2014
* Company: 易宝支付(YeePay)
diff --git a/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelConstants.java b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelConstants.java
new file mode 100644
index 00000000..22496fcd
--- /dev/null
+++ b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelConstants.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ */
+package com.yeepay.yop.sdk.router.sentinel;
+
+/**
+ * title:
+ * description: 描述
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ *
+ * @author wdc
+ * @version 1.0.0
+ * @since 2024/1/29
+ */
+public class YopSentinelConstants {
+ public static final boolean SDK_ROUTER_SENTINEL_DEBUG = Boolean.parseBoolean(System.getProperty("yop.sdk.router.sentinel.debug", "false"));
+}
diff --git a/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelInit.java b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelInit.java
new file mode 100644
index 00000000..82dba02d
--- /dev/null
+++ b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelInit.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ */
+package com.yeepay.yop.sdk.router.sentinel;
+
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.init.InitFunc;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreakerStateChangeObserver;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.EventObserverRegistry;
+
+import java.util.ServiceLoader;
+
+/**
+ * title:
+ * description: 描述
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ *
+ * @author wdc
+ * @version 1.0.0
+ * @since 2024/4/3
+ */
+public class YopSentinelInit implements InitFunc {
+
+ @Override
+ public void init() throws Exception {
+ ServiceLoader serviceLoader = ServiceLoader.load(CircuitBreakerStateChangeObserver .class);
+ for (CircuitBreakerStateChangeObserver item : serviceLoader) {
+ EventObserverRegistry.getInstance().addStateChangeObserver(item.getClass().getCanonicalName(), item);
+ }
+ }
+}
diff --git a/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelMetricsHelper.java b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelMetricsHelper.java
new file mode 100644
index 00000000..9929bf4a
--- /dev/null
+++ b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelMetricsHelper.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ */
+package com.yeepay.yop.sdk.router.sentinel;
+
+import com.google.common.collect.Maps;
+import com.yeepay.yop.sdk.invoke.model.BlockResource;
+
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * title: sentinel资源监控数据封装
+ * description: 描述
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ *
+ * @author wdc
+ * @version 1.0.0
+ * @since 2024/3/29
+ */
+public class YopSentinelMetricsHelper {
+
+ private static final ReentrantReadWriteLock READ_WRITE_LOCK = new ReentrantReadWriteLock();
+
+ /**
+ * 历史熔断资源列表,按自定义规则分组,组内资源对等,按熔断时间倒序排列,可互相切换
+ */
+ private static final Map> BLOCK_RESOURCE_BY_GROUP = Maps.newConcurrentMap();
+
+ /**
+ * 资源熔断次数序列号
+ */
+ private static final Map RESOURCE_BLOCK_COUNTER = Maps.newConcurrentMap();
+
+ /**
+ * 资源监控数据读写锁
+ *
+ * @return ReentrantReadWriteLock
+ */
+ public static ReentrantReadWriteLock getMetricsReadWriteLock() {
+ return READ_WRITE_LOCK;
+ }
+
+
+ /**
+ * 资源熔断事件
+ *
+ * @param resourceGroup 资源分组
+ * @param resource 资源
+ * @param isBlockedResource 是否为熔断资源
+ */
+ public static void onResourceBlocked(String resourceGroup, String resource, boolean isBlockedResource) {
+ READ_WRITE_LOCK.writeLock().lock();
+ try {
+ LinkedList blockResources = BLOCK_RESOURCE_BY_GROUP.get(resourceGroup);
+ if (null == blockResources) {
+ blockResources = new LinkedList<>();
+ } else {
+ blockResources.remove(resource);
+ }
+ blockResources.add(resource);
+
+ // 熔断资源,再次熔断时,计数器自增
+ if (isBlockedResource) {
+ AtomicLong resourceSequence = RESOURCE_BLOCK_COUNTER.get(resource);
+ if (null == resourceSequence) {
+ resourceSequence = new AtomicLong(1);
+ RESOURCE_BLOCK_COUNTER.put(resource, resourceSequence);
+ } else {
+ resourceSequence.getAndAdd(1);
+ }
+ }
+
+ } finally {
+ READ_WRITE_LOCK.writeLock().unlock();
+ }
+ }
+
+ /**
+ * 资源熔断恢复事件
+ *
+ * @param resourceGroup 资源分组
+ * @param resource 资源
+ */
+ public static void onResourceAvailable(String resourceGroup, String resource) {
+ READ_WRITE_LOCK.writeLock().lock();
+ try {
+ LinkedList blockResources = BLOCK_RESOURCE_BY_GROUP.get(resourceGroup);
+ if (null == blockResources) {
+ blockResources = new LinkedList<>();
+ } else {
+ blockResources.remove(resource);
+ }
+ blockResources.addFirst(resource);
+ } finally {
+ READ_WRITE_LOCK.writeLock().unlock();
+ }
+ }
+
+ /**
+ * 获取分组内最早熔断资源
+ *
+ * @param resourceGroup 资源分组
+ * @return BlockResource
+ */
+ public static BlockResource findFirstBlockResourceByGroup(String resourceGroup) {
+ READ_WRITE_LOCK.readLock().lock();
+ try {
+ LinkedList blockResources = BLOCK_RESOURCE_BY_GROUP.get(resourceGroup);
+ if (null == blockResources || blockResources.isEmpty()) {
+ return null;
+ }
+
+ final String firstBlockResource = blockResources.peek();
+ if (null == firstBlockResource) {
+ return null;
+ }
+
+ AtomicLong resourceSequence = RESOURCE_BLOCK_COUNTER.get(firstBlockResource);
+ if (null == resourceSequence) {
+ READ_WRITE_LOCK.readLock().unlock();
+ READ_WRITE_LOCK.writeLock().lock();
+ try {
+ resourceSequence = RESOURCE_BLOCK_COUNTER.get(firstBlockResource);
+ if (null == resourceSequence) {
+ resourceSequence = new AtomicLong(1);
+ RESOURCE_BLOCK_COUNTER.put(firstBlockResource, resourceSequence);
+ }
+ READ_WRITE_LOCK.readLock().lock();
+ } finally {
+ READ_WRITE_LOCK.writeLock().unlock();
+ }
+ }
+ return new BlockResource(firstBlockResource, resourceSequence.get());
+ } finally {
+ READ_WRITE_LOCK.readLock().unlock();
+ }
+ }
+
+ /**
+ * 获取当前熔断资源
+ *
+ * @param resource 资源
+ * @return BlockResource
+ */
+ public static BlockResource findCurrentBlockResource(String resource) {
+ READ_WRITE_LOCK.readLock().lock();
+ try {
+ AtomicLong resourceSequence = RESOURCE_BLOCK_COUNTER.get(resource);
+ if (null == resourceSequence) {
+ READ_WRITE_LOCK.readLock().unlock();
+ READ_WRITE_LOCK.writeLock().lock();
+ try {
+ resourceSequence = RESOURCE_BLOCK_COUNTER.get(resource);
+ if (null == resourceSequence) {
+ resourceSequence = new AtomicLong(1);
+ RESOURCE_BLOCK_COUNTER.put(resource, resourceSequence);
+ }
+ READ_WRITE_LOCK.readLock().lock();
+ } finally {
+ READ_WRITE_LOCK.writeLock().unlock();
+ }
+ }
+ return new BlockResource(resource, resourceSequence.get());
+ } finally {
+ READ_WRITE_LOCK.readLock().unlock();
+ }
+ }
+}
diff --git a/yop-java-sdk-base/src/main/java/com/yeepay/yop/sdk/log/YopSentinelRecordLogger.java b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelRecordLogger.java
similarity index 80%
rename from yop-java-sdk-base/src/main/java/com/yeepay/yop/sdk/log/YopSentinelRecordLogger.java
rename to yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelRecordLogger.java
index f14a5ae0..34e8b400 100644
--- a/yop-java-sdk-base/src/main/java/com/yeepay/yop/sdk/log/YopSentinelRecordLogger.java
+++ b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSentinelRecordLogger.java
@@ -2,15 +2,14 @@
* Copyright: Copyright (c)2014
* Company: 易宝支付(YeePay)
*/
-package com.yeepay.yop.sdk.log;
+package com.yeepay.yop.sdk.router.sentinel;
-import com.alibaba.csp.sentinel.log.LogTarget;
-import com.alibaba.csp.sentinel.log.Logger;
-import com.yeepay.yop.sdk.YopConstants;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.log.LogTarget;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.log.Logger;
import org.slf4j.LoggerFactory;
/**
- * title:
+ * title: yop定制,record-log输出控制
* description: 描述
* Copyright: Copyright (c)2014
* Company: 易宝支付(YeePay)
@@ -26,14 +25,14 @@ public class YopSentinelRecordLogger implements Logger {
@Override
public void info(String format, Object... arguments) {
- if (YopConstants.SDK_DEBUG) {
+ if (YopSentinelConstants.SDK_ROUTER_SENTINEL_DEBUG) {
LOGGER.info(format, arguments);
}
}
@Override
public void info(String msg, Throwable e) {
- if (YopConstants.SDK_DEBUG) {
+ if (YopSentinelConstants.SDK_ROUTER_SENTINEL_DEBUG) {
LOGGER.info(msg, e);
}
}
diff --git a/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSph.java b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSph.java
new file mode 100644
index 00000000..12a94abb
--- /dev/null
+++ b/yop-java-sdk-router/src/main/java/com/yeepay/yop/sdk/router/sentinel/YopSph.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ */
+package com.yeepay.yop.sdk.router.sentinel;
+
+import com.yeepay.yop.sdk.invoke.model.UriResource;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.Constants;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.Entry;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.EntryType;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.context.Context;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.context.ContextUtil;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.context.NullContext;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.init.InitExecutor;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.log.RecordLog;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.slotchain.*;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.slots.block.BlockException;
+import com.yeepay.yop.sdk.router.third.com.alibaba.csp.sentinel.slots.block.Rule;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * title: yop定制sentinel代码,重写部分代码
+ * description: 描述
+ * Copyright: Copyright (c)2014
+ * Company: 易宝支付(YeePay)
+ *
+ * @author wdc
+ * @version 1.0.0
+ * @since 2023/12/11
+ */
+public class YopSph {
+
+ private static final YopSph yopSph = new YopSph();
+
+ static {
+ // If init fails, the process will exit.
+ InitExecutor.doInit();
+ }
+
+ public static YopSph getInstance() {
+ return yopSph;
+ }
+
+ private static final Object[] OBJECTS0 = new Object[0];
+
+ /**
+ * Same resource({@link ResourceWrapper#equals(Object)}) will share the same
+ * {@link ProcessorSlotChain}, no matter in which {@link Context}.
+ */
+ private static volatile Map chainMap = new HashMap();
+
+ private static final Object LOCK = new Object();
+
+ private Entry entryWithPriority(ResourceWrapper resourceWrapper, int count, boolean prioritized, Object... args)
+ throws BlockException {
+ Context context = ContextUtil.getContext();
+ if (context instanceof NullContext) {
+ // The {@link NullContext} indicates that the amount of context has exceeded the threshold,
+ // so here init the entry only. No rule checking will be done.
+ return new YopEntry(resourceWrapper, null, context);
+ }
+
+ if (context == null) {
+ // Using default context.
+ context = YopSph.InternalContextUtil.internalEnter(Constants.CONTEXT_DEFAULT_NAME);
+ }
+
+ // Global switch is close, no rule checking will do.
+ if (!Constants.ON) {
+ return new YopEntry(resourceWrapper, null, context);
+ }
+
+ ProcessorSlot