groupList) {
+ if (groupList.stream().anyMatch(this::machineEqual)) {
+ return Optional.empty();
+ }
+ // Build client assign config from the client set of target server group.
+ for (ClusterGroupEntity group : groupList) {
+ if (group.getClientSet().contains(getCurrentMachineId())) {
+ String ip = group.getIp();
+ Integer port = group.getPort();
+ return Optional.of(new ClusterClientAssignConfig(ip, port));
+ }
+ }
+ return Optional.empty();
+ }
+
+ private boolean machineEqual(/*@Valid*/ ClusterGroupEntity group) {
+ return getCurrentMachineId().equals(group.getMachineId());
+ }
+
+ private String getCurrentMachineId() {
+ return HostNameUtil.getIp() + SEPARATOR + TransportConfig.getRuntimePort();
+ }
+
+ private static final String SEPARATOR = "@";
+}
diff --git a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.init.InitFunc b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.init.InitFunc
new file mode 100755
index 00000000..18228659
--- /dev/null
+++ b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.init.InitFunc
@@ -0,0 +1 @@
+com.alibaba.csp.sentinel.demo.cluster.init.DemoClusterInitFunc
\ No newline at end of file
diff --git a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml
new file mode 100644
index 00000000..1cb3529f
--- /dev/null
+++ b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml
@@ -0,0 +1,39 @@
+
+
+
+ sentinel-demo-cluster
+ com.alibaba.csp
+ 1.4.1-SNAPSHOT
+
+ 4.0.0
+
+ sentinel-demo-cluster-server-alone
+
+
+
+ com.alibaba.csp
+ sentinel-core
+
+
+ com.alibaba.csp
+ sentinel-transport-simple-http
+
+
+ com.alibaba.csp
+ sentinel-parameter-flow-control
+
+
+
+ com.alibaba.csp
+ sentinel-cluster-server-default
+ ${project.version}
+
+
+
+ com.alibaba.csp
+ sentinel-datasource-nacos
+
+
+
\ No newline at end of file
diff --git a/sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterServerDemo.java b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterServerDemo.java
similarity index 90%
rename from sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterServerDemo.java
rename to sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterServerDemo.java
index 8d731f28..b1398b77 100644
--- a/sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterServerDemo.java
+++ b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterServerDemo.java
@@ -23,9 +23,9 @@ import com.alibaba.csp.sentinel.cluster.server.config.ClusterServerConfigManager
import com.alibaba.csp.sentinel.cluster.server.config.ServerTransportConfig;
/**
- * Cluster server demo (alone mode).
- *
- * Here we init the cluster server dynamic data sources in {@link com.alibaba.csp.sentinel.demo.cluster.init.DemoClusterServerInitFunc}.
+ * Cluster server demo (alone mode).
+ * Here we init the cluster server dynamic data sources in
+ * {@link com.alibaba.csp.sentinel.demo.cluster.init.DemoClusterServerInitFunc}.
*
* @author Eric Zhao
* @since 1.4.0
diff --git a/sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/DemoConstants.java b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/java/com/alibaba/csp/sentinel/demo/cluster/DemoConstants.java
similarity index 100%
rename from sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/DemoConstants.java
rename to sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/java/com/alibaba/csp/sentinel/demo/cluster/DemoConstants.java
diff --git a/sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/init/DemoClusterServerInitFunc.java b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/java/com/alibaba/csp/sentinel/demo/cluster/init/DemoClusterServerInitFunc.java
similarity index 100%
rename from sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/init/DemoClusterServerInitFunc.java
rename to sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/java/com/alibaba/csp/sentinel/demo/cluster/init/DemoClusterServerInitFunc.java
diff --git a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.init.InitFunc b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.init.InitFunc
new file mode 100755
index 00000000..3d38f81e
--- /dev/null
+++ b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.init.InitFunc
@@ -0,0 +1 @@
+com.alibaba.csp.sentinel.demo.cluster.init.DemoClusterServerInitFunc
\ No newline at end of file
diff --git a/sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterClientDemo.java b/sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterClientDemo.java
deleted file mode 100644
index c665fc3a..00000000
--- a/sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterClientDemo.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 1999-2018 Alibaba Group Holding Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.alibaba.csp.sentinel.demo.cluster;
-
-import com.alibaba.csp.sentinel.Entry;
-import com.alibaba.csp.sentinel.EntryType;
-import com.alibaba.csp.sentinel.SphU;
-import com.alibaba.csp.sentinel.cluster.ClusterStateManager;
-import com.alibaba.csp.sentinel.init.InitExecutor;
-import com.alibaba.csp.sentinel.slots.block.BlockException;
-
-/**
- * Run this demo with the following args: -Dproject.name=appA
- *
- * @author Eric Zhao
- */
-public class ClusterClientDemo {
-
- public static void main(String[] args) {
- InitExecutor.doInit();
-
- // Manually schedule the cluster mode to client.
- // In common, we need a scheduling system to modify the cluster mode automatically.
- // Command HTTP API: http://:/setClusterMode?mode=
- ClusterStateManager.setToClient();
-
- String resourceName = "cluster-demo-entry";
-
- // Assume we have a cluster flow rule for `demo-resource`: QPS = 5 in AVG_LOCAL mode.
- for (int i = 0; i < 10; i++) {
- tryEntry(resourceName);
- }
- }
-
- private static void tryEntry(String res) {
- Entry entry = null;
- try {
- entry = SphU.entry(res, EntryType.IN, 1, "abc", "def");
- System.out.println("Passed");
- } catch (BlockException ex) {
- ex.printStackTrace();
- } finally {
- if (entry != null) {
- entry.exit();
- }
- }
- }
-}
diff --git a/sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/init/DemoClusterClientInitFunc.java b/sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/init/DemoClusterClientInitFunc.java
deleted file mode 100644
index d75804be..00000000
--- a/sentinel-demo/sentinel-demo-cluster/src/main/java/com/alibaba/csp/sentinel/demo/cluster/init/DemoClusterClientInitFunc.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 1999-2018 Alibaba Group Holding Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.alibaba.csp.sentinel.demo.cluster.init;
-
-import java.util.List;
-
-import com.alibaba.csp.sentinel.cluster.client.config.ClusterClientConfig;
-import com.alibaba.csp.sentinel.cluster.client.config.ClusterClientConfigManager;
-import com.alibaba.csp.sentinel.datasource.ReadableDataSource;
-import com.alibaba.csp.sentinel.datasource.nacos.NacosDataSource;
-import com.alibaba.csp.sentinel.demo.cluster.DemoConstants;
-import com.alibaba.csp.sentinel.init.InitFunc;
-import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
-import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
-import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule;
-import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRuleManager;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.TypeReference;
-
-/**
- * @author Eric Zhao
- */
-public class DemoClusterClientInitFunc implements InitFunc {
-
- @Override
- public void init() throws Exception {
- final String remoteAddress = "localhost";
- final String groupId = "SENTINEL_GROUP";
- final String flowDataId = DemoConstants.APP_NAME + DemoConstants.FLOW_POSTFIX;
- final String paramDataId = DemoConstants.APP_NAME + DemoConstants.PARAM_FLOW_POSTFIX;
- final String configDataId = DemoConstants.APP_NAME + "-cluster-client-config";
-
- ReadableDataSource> ruleSource = new NacosDataSource<>(remoteAddress, groupId,
- flowDataId, source -> JSON.parseObject(source, new TypeReference>() {}));
- FlowRuleManager.register2Property(ruleSource.getProperty());
- ReadableDataSource> paramRuleSource = new NacosDataSource<>(remoteAddress, groupId,
- paramDataId, source -> JSON.parseObject(source, new TypeReference>() {}));
- ParamFlowRuleManager.register2Property(paramRuleSource.getProperty());
-
- ReadableDataSource dataSource = new NacosDataSource<>(remoteAddress, groupId,
- configDataId, source -> JSON.parseObject(source, new TypeReference() {}));
- ClusterClientConfigManager.register2Property(dataSource.getProperty());
- }
-}
diff --git a/sentinel-demo/sentinel-demo-cluster/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.init.InitFunc b/sentinel-demo/sentinel-demo-cluster/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.init.InitFunc
deleted file mode 100755
index 11b70ec5..00000000
--- a/sentinel-demo/sentinel-demo-cluster/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.init.InitFunc
+++ /dev/null
@@ -1,2 +0,0 @@
-com.alibaba.csp.sentinel.demo.cluster.init.DemoClusterClientInitFunc
-com.alibaba.csp.sentinel.demo.cluster.init.DemoClusterServerInitFunc
\ No newline at end of file