You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/12/06 11:14:40 UTC

[dubbo-go-samples] branch master updated: feat: add polaris test (#306)

This is an automated email from the ASF dual-hosted git repository.

alexstocks pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git


The following commit(s) were added to refs/heads/master by this push:
     new 804bc6e  feat: add polaris test (#306)
804bc6e is described below

commit 804bc6e6625797dff0147aad8711bf470f55b9f5
Author: liaochuntao <li...@live.com>
AuthorDate: Mon Dec 6 19:14:35 2021 +0800

    feat: add polaris test (#306)
    
    Co-authored-by: springliao <sp...@tencent.com>
---
 registry/polaris/go-client/cmd/main.go       |  80 ++++++++++++++++++++
 registry/polaris/go-client/conf/dubbogo.yaml |  15 ++++
 registry/polaris/go-server/cmd/server.go     | 109 +++++++++++++++++++++++++++
 registry/polaris/go-server/conf/dubbogo.yaml |  26 +++++++
 4 files changed, 230 insertions(+)

diff --git a/registry/polaris/go-client/cmd/main.go b/registry/polaris/go-client/cmd/main.go
new file mode 100644
index 0000000..5a1b4fc
--- /dev/null
+++ b/registry/polaris/go-client/cmd/main.go
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 main
+
+import (
+	"context"
+	"os"
+	"time"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	"dubbo.apache.org/dubbo-go/v3/config"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+
+	hessian "github.com/apache/dubbo-go-hessian2"
+)
+
+type UserProviderWithCustomGroupAndVersion struct {
+	GetUser func(ctx context.Context, req *User) (rsp *User, err error)
+}
+
+type UserProvider struct {
+	GetUser func(ctx context.Context, req *User) (rsp *User, err error)
+}
+
+type User struct {
+	ID   string
+	Name string
+	Age  int32
+	Time time.Time
+}
+
+func (u *User) JavaClassName() string {
+	return "org.apache.dubbo.User"
+}
+
+func main() {
+	var userProvider = &UserProvider{}
+	var userProviderWithCustomRegistryGroupAndVersion = &UserProviderWithCustomGroupAndVersion{}
+	config.SetConsumerService(userProvider)
+	config.SetConsumerService(userProviderWithCustomRegistryGroupAndVersion)
+	hessian.RegisterPOJO(&User{})
+	err := config.Load()
+	if err != nil {
+		panic(err)
+	}
+
+	logger.Infof("\n\n\nstart to test dubbo")
+	user, err := userProvider.GetUser(context.TODO(), &User{Name: "Alex001"})
+	if err != nil {
+		logger.Errorf("error: %v\n", err)
+		os.Exit(1)
+		return
+	}
+	logger.Infof("response result: %v\n", user)
+
+	user, err = userProviderWithCustomRegistryGroupAndVersion.GetUser(context.TODO(), &User{Name: "Alex001"})
+	if err != nil {
+		logger.Errorf("error: %v\n", err)
+		os.Exit(1)
+		return
+	}
+	logger.Infof("response result: %v\n", user)
+}
diff --git a/registry/polaris/go-client/conf/dubbogo.yaml b/registry/polaris/go-client/conf/dubbogo.yaml
new file mode 100644
index 0000000..d7fd85a
--- /dev/null
+++ b/registry/polaris/go-client/conf/dubbogo.yaml
@@ -0,0 +1,15 @@
+dubbo:
+  registries:
+    polarisMesh:
+      protocol: polaris
+      address: 127.0.0.1:8091
+      namespace: default
+  consumer:
+    references:
+      UserProvider:
+        protocol: dubbo
+        interface: org.apache.dubbo.UserProvider.Test
+      UserProviderWithCustomGroupAndVersion:
+        protocol: dubbo
+        interface: org.apache.dubbo.UserProvider.Test2
+        version: myInterfaceVersion # dubbo interface version must be same with server
\ No newline at end of file
diff --git a/registry/polaris/go-server/cmd/server.go b/registry/polaris/go-server/cmd/server.go
new file mode 100644
index 0000000..1da04ab
--- /dev/null
+++ b/registry/polaris/go-server/cmd/server.go
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 main
+
+import (
+	"context"
+	"fmt"
+	"os"
+	"os/signal"
+	"syscall"
+	"time"
+)
+
+import (
+	"dubbo.apache.org/dubbo-go/v3/common/logger"
+	"dubbo.apache.org/dubbo-go/v3/config"
+	_ "dubbo.apache.org/dubbo-go/v3/imports"
+
+	hessian "github.com/apache/dubbo-go-hessian2"
+)
+
+var (
+	survivalTimeout = int(3e9)
+)
+
+func init() {
+	config.SetProviderService(&UserProvider{})
+	config.SetProviderService(&UserProviderWithCustomGroupAndVersion{})
+	// ------for hessian2------
+	hessian.RegisterPOJO(&User{})
+}
+
+type User struct {
+	ID   string
+	Name string
+	Age  int32
+	Time time.Time
+}
+
+type UserProvider struct {
+}
+
+func (u *UserProvider) GetUser(ctx context.Context, req *User) (*User, error) {
+	logger.Infof("req:%#v", req)
+	rsp := User{"A001", "Alex Stocks", 18, time.Now()}
+	logger.Infof("rsp:%#v", rsp)
+	return &rsp, nil
+}
+
+func (u *User) JavaClassName() string {
+	return "org.apache.dubbo.User"
+}
+
+type UserProviderWithCustomGroupAndVersion struct {
+}
+
+func (u *UserProviderWithCustomGroupAndVersion) GetUser(ctx context.Context, req *User) (*User, error) {
+	logger.Infof("req:%#v", req)
+	rsp := User{"A001", "Alex Stocks from UserProviderWithCustomGroupAndVersion", 18, time.Now()}
+	logger.Infof("rsp:%#v", rsp)
+	return &rsp, nil
+}
+
+// need to setup environment variable "CONF_PROVIDER_FILE_PATH" to "conf/server.yml" before run
+func main() {
+	if err := config.Load(); err != nil {
+		panic(err)
+	}
+
+	initSignal()
+}
+
+func initSignal() {
+	signals := make(chan os.Signal, 1)
+	// It is not possible to block SIGKILL or syscall.SIGSTOP
+	signal.Notify(signals, os.Interrupt, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
+	for {
+		sig := <-signals
+		logger.Infof("get signal %s", sig.String())
+		switch sig {
+		case syscall.SIGHUP:
+			// reload()
+		default:
+			time.AfterFunc(time.Duration(survivalTimeout), func() {
+				logger.Warnf("app exit now by force...")
+				os.Exit(1)
+			})
+
+			// The program exits normally or timeout forcibly exits.
+			fmt.Println("provider app exit now...")
+			return
+		}
+	}
+}
diff --git a/registry/polaris/go-server/conf/dubbogo.yaml b/registry/polaris/go-server/conf/dubbogo.yaml
new file mode 100644
index 0000000..06fd8fb
--- /dev/null
+++ b/registry/polaris/go-server/conf/dubbogo.yaml
@@ -0,0 +1,26 @@
+dubbo:
+  application:
+    name: myApp # metadata: application=myApp; name=myApp
+    module: opensource #metadata: module=opensource
+    group: myAppGroup # no metadata record
+    organization: dubbo # metadata: organization=dubbo
+    owner: laurence # metadata: owner=laurence
+    version: myversion # metadata: app.version=myversion
+    environment: pro # metadata: environment=pro
+  registries:
+    polarisMesh:
+      protocol: polaris
+      address: 127.0.0.1:8091
+      namespace: default
+  protocols:
+    dubbo:
+      name: dubbo
+      port: 20000
+  provider:
+    services:
+      UserProvider:
+        interface: org.apache.dubbo.UserProvider.Test
+      UserProviderWithCustomGroupAndVersion:
+        interface: org.apache.dubbo.UserProvider.Test2
+        version: myInterfaceVersion # dubbo interface version must be same with client
+        group: myInterfaceGroup # dubbo interface group must be same with client
\ No newline at end of file