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

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


The following commit(s) were added to refs/heads/main by this push:
     new 5a313dc5 refactor: migrate to new API and use direct mode (#1055)
5a313dc5 is described below

commit 5a313dc595cbcacf66837f60f497d7c1d0400108
Author: Rynzie <[email protected]>
AuthorDate: Sat Mar 21 12:54:53 2026 +0800

    refactor: migrate to new API and use direct mode (#1055)
    
    * refactor: mirage to new API and use direct mode
    
    * fix: expose dubbo port 20000 in java-server and clean up port 50052 on 
stop
    
    * refactor(generic): use service-level WithURL in NewGenericService and 
update docs
---
 Makefile                                           |  4 +-
 generic/README.md                                  | 24 +++------
 generic/README_zh.md                               | 24 +++------
 generic/go-client/cmd/client.go                    | 60 ++++++++++------------
 generic/go-server/cmd/server.go                    |  8 +--
 .../apache/dubbo/samples/ApiTripleConsumer.java    | 10 ++--
 .../java/org/apache/dubbo/samples/ApiProvider.java |  9 ++--
 7 files changed, 54 insertions(+), 85 deletions(-)

diff --git a/Makefile b/Makefile
index 1ea0ebc4..b0c483a3 100644
--- a/Makefile
+++ b/Makefile
@@ -85,7 +85,7 @@ start: build
        $(info   >  Starting application $(PROJECT_NAME), output is redirected 
to $(LOG_FILE))
        @ls $(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME) >/dev/null
        @-pkill -f "$(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME)" 2>/dev/null || true
-       @-command -v lsof >/dev/null 2>&1 && lsof -P -sTCP:LISTEN -tiTCP:20000 
-iTCP:20001 -iTCP:20002 -iTCP:20022 -iTCP:4318 -iTCP:50051 | xargs -r kill -9 
|| true
+       @-command -v lsof >/dev/null 2>&1 && lsof -P -sTCP:LISTEN -tiTCP:20000 
-iTCP:20001 -iTCP:20002 -iTCP:20022 -iTCP:4318 -iTCP:50051 -iTCP:50052 | xargs 
-r kill -9 || true
        @sleep 1
        @-cd $(PROJECT_DIR) && $(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME) > 
$(LOG_FILE) 2>&1 & echo $$! > $(PID)
        @sed 's/^/  \>  PID: /' $(PID)
@@ -98,4 +98,4 @@ stop:
        @-test -f $(PID) && kill `cat $(PID)` 2>/dev/null || true
        @-pkill -f "$(OUT_DIR)/$(PROJECT_NAME)$(EXT_NAME)" 2>/dev/null || true
        @-rm -f $(PID)
-       @-command -v lsof >/dev/null 2>&1 && lsof -P -sTCP:LISTEN -tiTCP:20000 
-iTCP:20001 -iTCP:20002 -iTCP:20022 -iTCP:4318 -iTCP:50051 | xargs -r kill -9 
|| true
+       @-command -v lsof >/dev/null 2>&1 && lsof -P -sTCP:LISTEN -tiTCP:20000 
-iTCP:20001 -iTCP:20002 -iTCP:20022 -iTCP:4318 -iTCP:50051 -iTCP:50052 | xargs 
-r kill -9 || true
diff --git a/generic/README.md b/generic/README.md
index e657de2d..8c7621ac 100644
--- a/generic/README.md
+++ b/generic/README.md
@@ -9,18 +9,11 @@ This sample demonstrates generic invocation over the Triple 
protocol for Go-Java
 ```
 generic/
 ├── go-server/      # Go provider (Triple protocol, port 50052)
-├── go-client/      # Go consumer with generic invocation (registry discovery)
+├── go-client/      # Go consumer with generic invocation (direct URL)
 ├── java-server/    # Java provider (Triple protocol, port 50052)
-└── java-client/    # Java consumer with generic invocation
+└── java-client/    # Java consumer with generic invocation (direct URL)
 ```
 
-## Prerequisites
-
-Start ZooKeeper (required for server registration and client discovery):
-
-```bash
-docker run -d --name zookeeper -p 2181:2181 zookeeper:3.8
-```
 
 ## Run the Go Server
 
@@ -29,7 +22,7 @@ cd generic/go-server/cmd
 go run .
 ```
 
-The server exposes the Triple protocol on port `50052`, registers to 
ZooKeeper, and serves `UserProvider` with version `1.0.0` and group `triple`.
+The server exposes the Triple protocol on port `50052` and serves 
`UserProvider` with version `1.0.0` and group `triple`. No registry is required.
 
 ## Run the Go Client
 
@@ -38,7 +31,7 @@ cd generic/go-client/cmd
 go run .
 ```
 
- The client discovers providers from ZooKeeper via the `RegistryIDs` field on 
`ReferenceConfig` and the registry configured on `RootConfig` (using 
`AddRegistry`), and performs generic calls via `config/generic.GenericService`
+The client passes `client.WithURL("tri://127.0.0.1:50052")` to 
`cli.NewGenericService(...)` for a per-service direct connection and performs 
generic calls through that generic service.
 
 ## Run the Java Server
 
@@ -56,7 +49,7 @@ cd generic/java-client
 mvn clean compile exec:java 
-Dexec.mainClass="org.apache.dubbo.samples.ApiTripleConsumer"
 ```
 
-The client uses `reference.setGeneric("true")` to perform generic calls and 
discovers providers from ZooKeeper.
+The client uses `reference.setGeneric("true")` and 
`reference.setUrl("tri://127.0.0.1:50052")` to perform generic calls via direct 
connection.
 
 ## Tested Methods
 
@@ -79,7 +72,6 @@ Server log:
 
 ```
 Generic Go server started on port 50052
-Registry: zookeeper://127.0.0.1:2181
 ```
 
 Client log:
@@ -94,6 +86,6 @@ All generic call tests completed
 ## Notes
 
 - Do NOT start Go Server and Java Server at the same time. Both listen on port 
50052.
-- The Go server requires ZooKeeper for service registration.
-- The Java client discovers providers from ZooKeeper.
-- The Go client discovers providers from ZooKeeper.
+- Neither the Go server nor the Java server requires ZooKeeper; both listen 
directly on their configured ports.
+- The Java client uses direct connection via `tri://127.0.0.1:50052` 
(`reference.setUrl(...)`).
+- The Go client uses direct connection via `tri://127.0.0.1:50052`.
diff --git a/generic/README_zh.md b/generic/README_zh.md
index 826e51b0..1f3fd1e2 100644
--- a/generic/README_zh.md
+++ b/generic/README_zh.md
@@ -9,18 +9,11 @@
 ```
 generic/
 ├── go-server/      # Go 服务端(Triple 协议,端口 50052)
-├── go-client/      # Go 客户端,泛化调用(注册中心发现)
+├── go-client/      # Go 客户端,泛化调用(直连 URL)
 ├── java-server/    # Java 服务端(Triple 协议,端口 50052)
-└── java-client/    # Java 客户端,泛化调用
+└── java-client/    # Java 客户端,泛化调用(直连 URL)
 ```
 
-## 前置条件
-
-启动 ZooKeeper(服务端注册和客户端发现服务都需要):
-
-```bash
-docker run -d --name zookeeper -p 2181:2181 zookeeper:3.8
-```
 
 ## 启动 Go 服务端
 
@@ -29,7 +22,7 @@ cd generic/go-server/cmd
 go run .
 ```
 
-服务端通过 Triple 协议监听 `50052` 端口,注册到 ZooKeeper,提供 `UserProvider` 
服务(version=1.0.0,group=triple)。
+服务端通过 Triple 协议监听 `50052` 端口,提供 `UserProvider` 
服务(version=1.0.0,group=triple),无需注册中心。
 
 ## 启动 Go 客户端
 
@@ -38,7 +31,7 @@ cd generic/go-client/cmd
 go run .
 ```
 
- 客户端通过 RootConfig 中的注册中心配置并在 ReferenceConfig 里通过 `RegistryIDs` 引用,从 ZooKeeper 
发现服务,并使用 config/generic.GenericService 进行泛化调用。
+客户端在 `cli.NewGenericService(...)` 处通过 
`client.WithURL("tri://127.0.0.1:50052")` 为该服务单独配置直连地址,并基于该泛化服务发起调用。
 
 ## 启动 Java 服务端
 
@@ -56,7 +49,7 @@ cd generic/java-client
 mvn clean compile exec:java 
-Dexec.mainClass="org.apache.dubbo.samples.ApiTripleConsumer"
 ```
 
-客户端使用 `reference.setGeneric("true")` 进行泛化调用,并通过 ZooKeeper 发现服务提供者。
+客户端使用 `reference.setGeneric("true")` 并通过 
`reference.setUrl("tri://127.0.0.1:50052")` 直连服务端进行泛化调用。
 
 ## 测试方法
 
@@ -79,7 +72,6 @@ mvn clean compile exec:java 
-Dexec.mainClass="org.apache.dubbo.samples.ApiTriple
 
 ```
 Generic Go server started on port 50052
-Registry: zookeeper://127.0.0.1:2181
 ```
 
 客户端日志:
@@ -94,6 +86,6 @@ All generic call tests completed
 ## 注意事项
 
 - 不要同时启动 Go 服务端和 Java 服务端,它们都监听 50052 端口。
-- Go 服务端需要 ZooKeeper 进行服务注册。
-- Java 客户端通过 ZooKeeper 发现服务。
-- Go 客户端通过 ZooKeeper 发现服务。
+- Go 服务端和 Java 服务端均无需 ZooKeeper,直接监听各自配置的端口。
+- Java 客户端通过 `reference.setUrl(...)` 直连 `tri://127.0.0.1:50052`。
+- Go 客户端通过 `tri://127.0.0.1:50052` 直连。
diff --git a/generic/go-client/cmd/client.go b/generic/go-client/cmd/client.go
index 58aad0ce..6e2d4dea 100644
--- a/generic/go-client/cmd/client.go
+++ b/generic/go-client/cmd/client.go
@@ -24,16 +24,15 @@ import (
 )
 
 import (
+       "dubbo.apache.org/dubbo-go/v3"
+       "dubbo.apache.org/dubbo-go/v3/client"
        "dubbo.apache.org/dubbo-go/v3/common/constant"
-       "dubbo.apache.org/dubbo-go/v3/config"
-       "dubbo.apache.org/dubbo-go/v3/config/generic"
+       "dubbo.apache.org/dubbo-go/v3/filter/generic"
        _ "dubbo.apache.org/dubbo-go/v3/imports"
 
        hessian "github.com/apache/dubbo-go-hessian2"
 
        "github.com/dubbogo/gost/log/logger"
-
-       tpconst "github.com/dubbogo/triple/pkg/common/constant"
 )
 
 import (
@@ -41,47 +40,42 @@ import (
 )
 
 const (
-       AppName          = "generic-go-client"
-       RegistryID       = "zk"
-       ZookeeperAddress = "127.0.0.1:2181"
-       UserProvider     = "org.apache.dubbo.samples.UserProvider"
-       ServiceVersion   = "1.0.0"
+       DirectServerURL = "tri://127.0.0.1:50052"
+       UserProvider    = "org.apache.dubbo.samples.UserProvider"
+       ServiceVersion  = "1.0.0"
+       ServiceGroup    = "triple"
 )
 
 func main() {
        hessian.RegisterPOJO(&pkg.User{})
 
-       rootConfig := config.NewRootConfigBuilder().
-               SetApplication(
-                       config.NewApplicationConfigBuilder().
-                               SetName(AppName).
-                               Build(),
-               ).
-               AddRegistry(RegistryID, &config.RegistryConfig{
-                       Protocol: "zookeeper",
-                       Address:  ZookeeperAddress,
-               }).
-               Build()
-       if err := config.Load(config.WithRootConfig(rootConfig)); err != nil {
+       ins, err := dubbo.NewInstance(
+               dubbo.WithName("generic-go-client"),
+       )
+       if err != nil {
                panic(err)
        }
 
-       refConf := config.ReferenceConfig{
-               InterfaceName: UserProvider,
-               RegistryIDs:   []string{RegistryID},
-               Protocol:      tpconst.TRIPLE,
-               Cluster:       "failover",
-               Group:         "triple",
-               Version:       ServiceVersion,
-               Serialization: constant.Hessian2Serialization,
-               Generic:       "true",
+       cli, err := ins.NewClient(
+               client.WithClientProtocolTriple(),
+               client.WithClientSerialization(constant.Hessian2Serialization),
+       )
+       if err != nil {
+               panic(err)
        }
-       if err := refConf.Init(rootConfig); err != nil {
+
+       genericService, err := cli.NewGenericService(
+               UserProvider,
+               client.WithURL(DirectServerURL),
+               client.WithVersion(ServiceVersion),
+               client.WithGroup(ServiceGroup),
+       )
+       if err != nil {
                panic(err)
        }
-       refConf.GenericLoad(AppName)
 
-       genericService := refConf.GetRPCService().(*generic.GenericService)
+       logger.Infof("Direct URL: %s", DirectServerURL)
+       logger.Info("Connected to server via direct URL, starting tests...")
 
        failed := false
        failed = runGenericTests(genericService) || failed
diff --git a/generic/go-server/cmd/server.go b/generic/go-server/cmd/server.go
index ec075493..356f54ba 100644
--- a/generic/go-server/cmd/server.go
+++ b/generic/go-server/cmd/server.go
@@ -22,7 +22,6 @@ import (
        "dubbo.apache.org/dubbo-go/v3/common/constant"
        _ "dubbo.apache.org/dubbo-go/v3/imports"
        "dubbo.apache.org/dubbo-go/v3/protocol"
-       "dubbo.apache.org/dubbo-go/v3/registry"
        "dubbo.apache.org/dubbo-go/v3/server"
 
        hessian "github.com/apache/dubbo-go-hessian2"
@@ -39,10 +38,6 @@ func main() {
 
        ins, err := dubbo.NewInstance(
                dubbo.WithName("generic-go-server"),
-               dubbo.WithRegistry(
-                       registry.WithZookeeper(),
-                       registry.WithAddress("127.0.0.1:2181"),
-               ),
                dubbo.WithProtocol(
                        protocol.WithTriple(),
                        protocol.WithPort(50052),
@@ -67,8 +62,7 @@ func main() {
                panic(err)
        }
 
-       logger.Info("Generic Go server started on port 50052")
-       logger.Info("Registry: zookeeper://127.0.0.1:2181")
+       logger.Info("Generic Go server started on port 50052 (no registry, 
direct connection)")
 
        if err := srv.Serve(); err != nil {
                logger.Errorf("server stopped: %v", err)
diff --git 
a/generic/java-client/src/main/java/org/apache/dubbo/samples/ApiTripleConsumer.java
 
b/generic/java-client/src/main/java/org/apache/dubbo/samples/ApiTripleConsumer.java
index df49510d..ecd30061 100644
--- 
a/generic/java-client/src/main/java/org/apache/dubbo/samples/ApiTripleConsumer.java
+++ 
b/generic/java-client/src/main/java/org/apache/dubbo/samples/ApiTripleConsumer.java
@@ -19,35 +19,33 @@ package org.apache.dubbo.samples;
 
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
 import org.apache.dubbo.rpc.service.GenericService;
 
 import java.util.HashMap;
 import java.util.Map;
 
 public class ApiTripleConsumer {
-    private static final String ZOOKEEPER_ADDRESS = 
"zookeeper://127.0.0.1:2181";
+    private static final String DIRECT_SERVER_URL = "tri://127.0.0.1:50052";
     private static final String SERVICE_VERSION = "1.0.0";
     private static final String SERVICE_GROUP = "triple";
 
     public static void main(String[] args) {
         System.out.println("\n========== Java Triple Generic Call Test 
==========");
-        System.out.println("Registry: " + ZOOKEEPER_ADDRESS);
+        System.out.println("Direct URL: " + DIRECT_SERVER_URL);
         System.out.println();
 
         ReferenceConfig<GenericService> reference = new ReferenceConfig<>();
         reference.setApplication(new ApplicationConfig("generic-java-client"));
-        reference.setRegistry(new RegistryConfig(ZOOKEEPER_ADDRESS));
         reference.setInterface("org.apache.dubbo.samples.UserProvider");
         reference.setGroup(SERVICE_GROUP);
         reference.setVersion(SERVICE_VERSION);
         reference.setGeneric("true");
-        reference.setProtocol("tri");
+        reference.setUrl(DIRECT_SERVER_URL);
         reference.setCheck(false);
 
         GenericService genericService = reference.get();
 
-        System.out.println("Connected to server via ZooKeeper, starting 
tests...\n");
+        System.out.println("Connected to server via direct URL, starting 
tests...\n");
 
         int passed = 0;
         int failed = 0;
diff --git 
a/generic/java-server/src/main/java/org/apache/dubbo/samples/ApiProvider.java 
b/generic/java-server/src/main/java/org/apache/dubbo/samples/ApiProvider.java
index 6e9d2596..f94195c7 100644
--- 
a/generic/java-server/src/main/java/org/apache/dubbo/samples/ApiProvider.java
+++ 
b/generic/java-server/src/main/java/org/apache/dubbo/samples/ApiProvider.java
@@ -28,7 +28,6 @@ public class ApiProvider {
     private static final int DUBBO_PORT = 20000;
     private static final int TRIPLE_PORT = 50052;
     private static final String SERVICE_VERSION = "1.0.0";
-    private static final String ZOOKEEPER_ADDRESS = 
"zookeeper://127.0.0.1:2181";
 
     public static void main(String[] args) throws InterruptedException {
         // Dubbo protocol service (group=dubbo)
@@ -47,9 +46,9 @@ public class ApiProvider {
         tripleService.setVersion(SERVICE_VERSION);
         tripleService.setProtocol(new ProtocolConfig("tri", TRIPLE_PORT));
 
-        // Register provider to ZooKeeper
-        RegistryConfig registryConfig = new RegistryConfig();
-        registryConfig.setAddress(ZOOKEEPER_ADDRESS);
+        // No registry: expose directly on the configured ports
+        // "N/A" disables registry; provider is exposed directly on the 
configured port
+        RegistryConfig registryConfig = new RegistryConfig("N/A");
 
         DubboBootstrap bootstrap = DubboBootstrap.getInstance();
         bootstrap.application("generic-java-server")
@@ -58,7 +57,7 @@ public class ApiProvider {
                 .service(tripleService)
                 .start();
 
-        System.out.println("Generic Java server started:");
+        System.out.println("Generic Java server started (no registry, direct 
connection):");
         System.out.println("  - Dubbo protocol on port " + DUBBO_PORT + " 
(group=dubbo)");
         System.out.println("  - Triple protocol on port " + TRIPLE_PORT + " 
(group=triple)");
 

Reply via email to