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)");