[ 
https://issues.apache.org/jira/browse/SCB-953?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16658479#comment-16658479
 ] 

ASF GitHub Bot commented on SCB-953:
------------------------------------

little-cui closed pull request #459: SCB-953 Make clusters configuration 
convenient
URL: https://github.com/apache/incubator-servicecomb-service-center/pull/459
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/docs/multidcs.md b/docs/multidcs.md
index 3354ff60..fa5381b8 100644
--- a/docs/multidcs.md
+++ b/docs/multidcs.md
@@ -69,7 +69,7 @@ scctl --addr http://10.12.0.3:30100 get cluster
 
 ## Example
 
-Here we show an example of multiple datacenters access, where we use an 
+Here we show a `golang` example of multiple datacenters access, where we use 
an 
 
[`example`](https://github.com/go-chassis/go-chassis/tree/master/examples/discovery)
 of the [`go-chassis`](https://github.com/go-chassis/go-chassis) project, 
assuming that below.
 
@@ -78,6 +78,11 @@ of the 
[`go-chassis`](https://github.com/go-chassis/go-chassis) project, assumin
 | Client       | dc-1        | 10.12.0.4   |   
 | Server       | dc-2        | 10.12.0.5   |
 
+Notes: `go-chassis` application can run perfectly in the above 2 architectures.
+If you are using 
[`java-chassis`](https://github.com/apache/incubator-servicecomb-java-chassis),
+there are only support the service center with the second architecture at the 
moment.
+You can ref to [`here`](/docs/multidcs2.md) for more details of the second 
architecture.
+
 ##### Start Server
 
 Edit the configuration of the ip/port on which Server will register.
diff --git a/docs/multidcs2-1.PNG b/docs/multidcs2-1.PNG
new file mode 100644
index 00000000..879cb63a
Binary files /dev/null and b/docs/multidcs2-1.PNG differ
diff --git a/docs/multidcs2.md b/docs/multidcs2.md
new file mode 100644
index 00000000..6670cc2a
--- /dev/null
+++ b/docs/multidcs2.md
@@ -0,0 +1,114 @@
+Using Java chassis for cross data center access
+-------
+
+Now that you've seen two [`multiple data center`](/docs/multidcs.md) 
architectures of the Service Center, 
+we'll show you how to implement micro-service cross data center access with 
the 
+[`java-chassis`](https://github.com/apache/incubator-servicecomb-java-chassis) 
framework.
+
+![architecture](/docs/multidcs2-1.PNG)
+
+## Quick Start
+
+Let's assume you want to install 2 clusters of Service-Center in different DCs 
with following details.
+
+| Cluster | Datacenter  | Address     |  
+| :-----: | :---------: | :---------: |  
+| sc-1    | dc-1        | 10.12.0.1   |   
+| sc-2    | dc-2        | 10.12.0.2   | 
+
+##### Start Service-Center
+
+Edit the configuration of the ip/port on which SC will run in dc-1.
+And here we assume your etcd is running on http://127.0.0.1:2379 (you can 
follow 
[this](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/container.md)
 guide to install etcd in cluster mode.)
+```bash
+vi conf/app.conf
+# Replace the below values
+httpaddr = 10.12.0.1
+discovery_plugin = aggregate
+aggregate_mode = "etcd,servicecenter"
+manager_name = "sc-1"
+manager_addr = "http://127.0.0.1:2379";
+manager_cluster = "sc-1=http://10.12.0.1:30100,sc-2=http://10.12.0.2:30100";
+
+# Start the Service-center
+./service-center
+```
+
+Notes:
++ `manager_name` is the alias of the data center.
+`manager_addr` is the etcd cluster client urls.
+`manager_cluster` is the full Service Center clusters list.
++ To deploy Service Center in dc-2, you can repeat the
+above steps and just change the `httpaddr` value to `10.12.0.2`.
+
+##### Confirm the service is OK
+
+We recommend that you use [`scctl`](/scctl/README.md), and using
+[`cluster command`](/scctl/pkg/plugin/README.md#cluster-options)
+which makes it very convenient to verify OK.
+
+```bash
+scctl --addr http://10.12.0.3:30100 get cluster
+#   CLUSTER |        ENDPOINTS         
+# +---------+-------------------------+
+#   sc-1    | http://10.12.0.1:30100  
+#   sc-2    | http://10.12.0.2:30100
+```
+
+## Example
+
+Here we show a `java` example of multiple datacenters access, where we use an 
+[`example`](https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/demo/demo-springmvc),
+assuming that below.
+
+| Microservice | Datacenter  | Address     |  
+| :-----:      | :---------: | :---------: |  
+| Client       | dc-1        | 10.12.0.4   |   
+| Server       | dc-2        | 10.12.0.5   |
+
+##### Start springmvc-server
+
+Edit the configuration of the ip/port on which `springmvc-server` will 
register.
+```
+vi src/main/resources/microservice.yaml
+```
+Replace the below values
+```yaml
+cse:
+  service:
+    registry:
+      address: http://10.12.0.2:30100 # the address of SC in dc-2
+```
+
+Run the Server
+```bash
+mvn clean install
+java -jar target/springmvc-server-0.0.1-SNAPSHOT.jar
+```
+##### Start springmvc-client
+
+Edit the configuration of the ip/port on which `springmvc-client` will 
register.
+```bash
+vi src/main/resources/microservice.yaml
+```
+Replace the below values
+```yaml
+cse:
+  service:
+    registry:
+      address: http://10.12.0.1:30100 # the address of SC in dc-1
+```
+
+Run the Client
+```bash
+mvn clean install
+java -jar target/springmvc-client-0.0.1-SNAPSHOT.jar
+```
+
+##### Confirm the multiple datacenters discovery is OK
+
+Since `springmvc-client` is not a service, we check its running log.
+```
+...
+[2018-10-19 23:04:42,800/CST][main][INFO]............. test finished 
............ org.apache.servicecomb.demo.TestMgr.summary(TestMgr.java:83)
+```
diff --git a/server/plugin/pkg/discovery/k8s/adaptor/cacher_index.go 
b/server/plugin/pkg/discovery/k8s/adaptor/cacher_index.go
index b03a637f..5958f31d 100644
--- a/server/plugin/pkg/discovery/k8s/adaptor/cacher_index.go
+++ b/server/plugin/pkg/discovery/k8s/adaptor/cacher_index.go
@@ -30,7 +30,7 @@ type ServiceIndexCacher struct {
 func (c *ServiceIndexCacher) onServiceEvent(evt K8sEvent) {
        svc := evt.Object.(*v1.Service)
        domainProject := Kubernetes().GetDomainProject()
-       serviceId := string(svc.UID)
+       serviceId := uuid(svc.UID)
        indexKey := 
core.GenerateServiceIndexKey(generateServiceKey(domainProject, svc))
 
        if !ShouldRegisterService(svc) {
diff --git a/server/plugin/pkg/discovery/k8s/adaptor/cacher_instance.go 
b/server/plugin/pkg/discovery/k8s/adaptor/cacher_instance.go
index 55c0f3eb..8147384b 100644
--- a/server/plugin/pkg/discovery/k8s/adaptor/cacher_instance.go
+++ b/server/plugin/pkg/discovery/k8s/adaptor/cacher_instance.go
@@ -33,7 +33,7 @@ type InstanceCacher struct {
 func (c *InstanceCacher) onServiceEvent(evt K8sEvent) {
        svc := evt.Object.(*v1.Service)
        domainProject := Kubernetes().GetDomainProject()
-       serviceId := string(svc.UID)
+       serviceId := uuid(svc.UID)
 
        switch evt.EventType {
        case pb.EVT_DELETE:
@@ -77,7 +77,7 @@ func (c *InstanceCacher) onEndpointsEvent(evt K8sEvent) {
                return
        }
 
-       serviceId := string(svc.UID)
+       serviceId := uuid(svc.UID)
        domainProject := Kubernetes().GetDomainProject()
        oldKvs := c.getInstances(domainProject, serviceId)
        newKvs := make(map[string]*discovery.KeyValue)
@@ -88,7 +88,7 @@ func (c *InstanceCacher) onEndpointsEvent(evt K8sEvent) {
                                continue
                        }
 
-                       instanceId := string(pod.UID)
+                       instanceId := uuid(pod.UID)
                        key := 
core.GenerateInstanceKey(Kubernetes().GetDomainProject(), serviceId, instanceId)
                        switch evt.EventType {
                        case pb.EVT_CREATE, pb.EVT_UPDATE:
diff --git a/server/plugin/pkg/discovery/k8s/adaptor/cacher_service.go 
b/server/plugin/pkg/discovery/k8s/adaptor/cacher_service.go
index cb5fcf04..f1df1ac7 100644
--- a/server/plugin/pkg/discovery/k8s/adaptor/cacher_service.go
+++ b/server/plugin/pkg/discovery/k8s/adaptor/cacher_service.go
@@ -30,7 +30,7 @@ type ServiceCacher struct {
 func (c *ServiceCacher) onServiceEvent(evt K8sEvent) {
        svc := evt.Object.(*v1.Service)
        domainProject := Kubernetes().GetDomainProject()
-       serviceId := string(svc.UID)
+       serviceId := uuid(svc.UID)
        key := core.GenerateServiceKey(domainProject, serviceId)
 
        if !ShouldRegisterService(svc) {
diff --git a/server/plugin/pkg/discovery/k8s/adaptor/common.go 
b/server/plugin/pkg/discovery/k8s/adaptor/common.go
index cf67a628..15ee29ab 100644
--- a/server/plugin/pkg/discovery/k8s/adaptor/common.go
+++ b/server/plugin/pkg/discovery/k8s/adaptor/common.go
@@ -20,8 +20,10 @@ import (
        "github.com/apache/incubator-servicecomb-service-center/pkg/util"
        "k8s.io/api/core/v1"
        meta "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "k8s.io/apimachinery/pkg/types"
        "k8s.io/client-go/kubernetes"
        "k8s.io/client-go/tools/clientcmd"
+       "strings"
        "time"
 )
 
@@ -95,3 +97,7 @@ func ShouldRegisterService(service *v1.Service) bool {
        }
        return true
 }
+
+func uuid(id types.UID) string {
+       return strings.Replace(string(id), "-", "", -1)
+}
diff --git a/server/plugin/pkg/discovery/k8s/adaptor/convertor.go 
b/server/plugin/pkg/discovery/k8s/adaptor/convertor.go
index a3239adb..c5e2fda3 100644
--- a/server/plugin/pkg/discovery/k8s/adaptor/convertor.go
+++ b/server/plugin/pkg/discovery/k8s/adaptor/convertor.go
@@ -89,7 +89,7 @@ func generateServiceKey(domainProject string, svc 
*v1.Service) *pb.MicroServiceK
 
 func FromK8sService(svc *v1.Service) (ms *pb.MicroService) {
        ms = &pb.MicroService{
-               ServiceId:   string(svc.UID),
+               ServiceId:   uuid(svc.UID),
                Environment: getLabel(svc.Labels, LabelEnvironment, ""),
                AppId:       getLabel(svc.Labels, LabelApp, pb.APP_ID),
                ServiceName: svc.Name,
diff --git a/server/plugin/pkg/registry/config.go 
b/server/plugin/pkg/registry/config.go
index b75cfa4b..d48beb0c 100644
--- a/server/plugin/pkg/registry/config.go
+++ b/server/plugin/pkg/registry/config.go
@@ -67,9 +67,12 @@ func (c *Config) InitClusters() {
                for i, name := range names {
                        c.Clusters[name] = addrs[i]
                }
+               if len(c.ManagerAddress) > 0 {
+                       c.Clusters[c.ClusterName] = 
strings.Split(c.ManagerAddress, ",")
+               }
        }
        if len(c.Clusters) == 0 {
-               c.Clusters[c.ClusterName] = []string{c.ClusterAddresses}
+               c.Clusters[c.ClusterName] = strings.Split(c.ClusterAddresses, 
",")
        }
 }
 
@@ -84,6 +87,12 @@ func Configuration() *Config {
                defaultRegistryConfig.ClusterName = 
beego.AppConfig.DefaultString("manager_name", "default")
                defaultRegistryConfig.ManagerAddress = 
beego.AppConfig.String("manager_addr")
                defaultRegistryConfig.ClusterAddresses = 
beego.AppConfig.DefaultString("manager_cluster", "http://127.0.0.1:2379";)
+               defaultRegistryConfig.InitClusters()
+
+               registryAddresses := 
strings.Join(defaultRegistryConfig.RegistryAddresses(), ",")
+               defaultRegistryConfig.SslEnabled = 
core.ServerInfo.Config.SslEnabled &&
+                       strings.Index(strings.ToLower(registryAddresses), 
"https://";) >= 0
+
                defaultRegistryConfig.DialTimeout, err = 
time.ParseDuration(beego.AppConfig.DefaultString("connect_timeout", "10s"))
                if err != nil {
                        log.Errorf(err, "connect_timeout is invalid, use 
default time %s", defaultDialTimeout)
@@ -94,13 +103,10 @@ func Configuration() *Config {
                        log.Errorf(err, "registry_timeout is invalid, use 
default time %s", defaultRequestTimeout)
                        defaultRegistryConfig.RequestTimeOut = 
defaultRequestTimeout
                }
-               defaultRegistryConfig.SslEnabled = 
core.ServerInfo.Config.SslEnabled &&
-                       
strings.Index(strings.ToLower(defaultRegistryConfig.ClusterAddresses), 
"https://";) >= 0
                defaultRegistryConfig.AutoSyncInterval, err = 
time.ParseDuration(core.ServerInfo.Config.AutoSyncInterval)
                if err != nil {
                        log.Errorf(err, "auto_sync_interval is invalid")
                }
-               defaultRegistryConfig.InitClusters()
        })
        return &defaultRegistryConfig
 }
diff --git a/server/plugin/pkg/registry/etcd/etcd_test.go 
b/server/plugin/pkg/registry/etcd/etcd_test.go
index f3856b47..328ae6d3 100644
--- a/server/plugin/pkg/registry/etcd/etcd_test.go
+++ b/server/plugin/pkg/registry/etcd/etcd_test.go
@@ -61,7 +61,7 @@ func TestInitCluster(t *testing.T) {
                t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().RegistryAddresses())
        }
        if strings.Join(registry.Configuration().Clusters["sc-0"], ",") != 
"127.0.0.1:2379,127.0.0.2:2379" {
-               t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().RegistryAddresses())
+               t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().Clusters)
        }
        registry.Configuration().ClusterName = "sc-0"
        registry.Configuration().ClusterAddresses = 
"sc-1=127.0.0.1:2379,127.0.0.2:2379,sc-2=127.0.0.3:2379"
@@ -70,10 +70,10 @@ func TestInitCluster(t *testing.T) {
                t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().RegistryAddresses())
        }
        if strings.Join(registry.Configuration().Clusters["sc-1"], ",") != 
"127.0.0.1:2379,127.0.0.2:2379" {
-               t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().RegistryAddresses())
+               t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().Clusters)
        }
        if strings.Join(registry.Configuration().Clusters["sc-2"], ",") != 
"127.0.0.3:2379" {
-               t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().RegistryAddresses())
+               t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().Clusters)
        }
        registry.Configuration().ClusterName = "sc-0"
        registry.Configuration().ClusterAddresses = 
"sc-0=127.0.0.1:2379,sc-1=127.0.0.3:2379,127.0.0.4:2379"
@@ -82,11 +82,26 @@ func TestInitCluster(t *testing.T) {
                t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().RegistryAddresses())
        }
        if strings.Join(registry.Configuration().Clusters["sc-1"], ",") != 
"127.0.0.3:2379,127.0.0.4:2379" {
+               t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().Clusters)
+       }
+       registry.Configuration().ClusterName = "sc-0"
+       registry.Configuration().ManagerAddress = 
"127.0.0.1:2379,127.0.0.2:2379"
+       registry.Configuration().ClusterAddresses = 
"sc-0=127.0.0.1:30100,sc-1=127.0.0.2:30100"
+       registry.Configuration().InitClusters()
+       if strings.Join(registry.Configuration().RegistryAddresses(), ",") != 
"127.0.0.1:2379,127.0.0.2:2379" {
                t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().RegistryAddresses())
        }
+       if strings.Join(registry.Configuration().Clusters["sc-1"], ",") != 
"127.0.0.2:30100" {
+               t.Fatalf("TestInitCluster failed, %v", 
registry.Configuration().Clusters)
+       }
 }
 
 func TestEtcdClient(t *testing.T) {
+       registry.Configuration().ClusterName = ""
+       registry.Configuration().ManagerAddress = ""
+       registry.Configuration().ClusterAddresses = endpoint
+       registry.Configuration().InitClusters()
+
        etcd := &EtcdClient{
                Endpoints:   []string{endpoint},
                DialTimeout: dialTimeout,


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Support sync distinct Kubernetes service types to service-center
> ----------------------------------------------------------------
>
>                 Key: SCB-953
>                 URL: https://issues.apache.org/jira/browse/SCB-953
>             Project: Apache ServiceComb
>          Issue Type: Improvement
>          Components: Service-Center
>            Reporter: little-cui
>            Assignee: little-cui
>            Priority: Major
>             Fix For: service-center-1.1.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to