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

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


The following commit(s) were added to refs/heads/master by this push:
     new 94325aab Change description and replace networking api (#845)
94325aab is described below

commit 94325aabf10115fa75e0d2d91a0e9ea6b1d7bef5
Author: mfordjody <[email protected]>
AuthorDate: Thu Jan 8 19:21:55 2026 +0800

    Change description and replace networking api (#845)
---
 .asf.yaml                                        |  9 +++--
 README.md                                        | 18 +++++-----
 dubbod/planet/pkg/config/kube/crdclient/types.go | 42 ++++++++++++------------
 pkg/config/schema/kubeclient/common.go           |  4 +--
 pkg/config/schema/kubeclient/resources.go        | 14 ++++----
 pkg/config/schema/kubetypes/resources.go         |  6 ++--
 pkg/kube/client.go                               | 10 +++---
 7 files changed, 54 insertions(+), 49 deletions(-)

diff --git a/.asf.yaml b/.asf.yaml
index d01745e7..4bdd12a8 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -20,8 +20,8 @@ notifications:
     jira_options: link label
 
 github:
-  homepage: https://dubbo.apache.org/
-  description: "Provides a proxyless service mesh for Dubbo microservices on 
Kubernetes."
+  homepage: https://dubbo.apache.org
+  description: "Grant Dubbo the ability to connect, secure, control, and 
observe."
   features:
     # Enable wiki for documentation
     wiki: false
@@ -35,7 +35,10 @@ github:
       # foo: bar
   labels:
     - dubbo
-    - kubernetes
+    - consul
+    - dubbo-go-pixiu
+    - microservice
     - microservices
+    - kubernetes
     - service-mesh
 
diff --git a/README.md b/README.md
index 057959ba..8b663575 100644
--- a/README.md
+++ b/README.md
@@ -6,24 +6,26 @@
 ![license](https://img.shields.io/badge/license-Apache--2.0-green.svg)
 
 <p align="left">
-  <a href="https://dubbo.apache.org/";>
+  <a href="https://dubbo.apache.org";>
     <img src="logo/dubbo-transparentbackground-unframed.svg" alt="Apache 
Dubbo" title="Apache Dubbo" width="240" height="320" >
   </a>
 </p>
 
-This project is an open-source proxyless service mesh for Dubbo microservices. 
Built on the Istio control plane architecture, it leverages its core 
capabilities and integrates deeply with Kubernetes, providing full service mesh 
functionality with minimal resource overhead, enabling high-performance 
inter-service communication, traffic management, and security features.
+This project is gRPC service mesh built for Dubbo, with low resource usage, 
enabling high-performance inter-service communication, traffic control, and 
security.
 
-## Project Structure
+## Introduction
 
-The main repositories of Dubbo on Kubernetes include:
+The repositories include:
 
-- **dubboctl** — The command-line management tool that provides control plane 
management, development framework scaffolding, and application deployment.
-- **dubbod** — The dubbo control plane. used to implement a Dubbo proxyless 
service mesh.
-- **operator** — Provides user-friendly options to operate the Dubbo proxyless 
service mesh.
+- **api** — API definitions for Dubbo.
+- **client-go** — Go client library for the Dubbo API.
+- **dubboctl** — Command-line tool that provides control plane management, 
development framework setup, and application deployment capabilities.
+- **dubbod** — The control plane, communicating based on gRPC and xDS APIs.
+- **operator** — Provides user-friendly options for operating the service mesh.
 
 ## Quick Start
 
-Please refer to [official 
website](https://cn.dubbo.apache.org/zh-cn/overview/home/)
+Please refer to [official 
website](https://cn.dubbo.apache.org/zh-cn/overview/mesh/)
 
 ## Contributing
 
diff --git a/dubbod/planet/pkg/config/kube/crdclient/types.go 
b/dubbod/planet/pkg/config/kube/crdclient/types.go
index dca35f46..a4f6d0ab 100644
--- a/dubbod/planet/pkg/config/kube/crdclient/types.go
+++ b/dubbod/planet/pkg/config/kube/crdclient/types.go
@@ -23,12 +23,12 @@ import (
 
        dubboapimetav1alpha1 
"github.com/apache/dubbo-kubernetes/api/meta/v1alpha1"
        orgapachedubboapinetworkingv1alpha3 
"github.com/apache/dubbo-kubernetes/api/networking/v1alpha3"
+       apiorgapachedubboapinetworkingv1alpha3 
"github.com/apache/dubbo-kubernetes/client-go/pkg/apis/networking/v1alpha3"
        "github.com/apache/dubbo-kubernetes/pkg/config"
        "github.com/apache/dubbo-kubernetes/pkg/config/schema/gvk"
        "github.com/apache/dubbo-kubernetes/pkg/kube"
        "github.com/apache/dubbo-kubernetes/pkg/util/protomarshal"
        istioioapisecurityv1beta1 "istio.io/api/security/v1beta1"
-       apiistioioapinetworkingv1 "istio.io/client-go/pkg/apis/networking/v1"
        apiistioioapisecurityv1 "istio.io/client-go/pkg/apis/security/v1"
        k8sioapiadmissionregistrationv1 "k8s.io/api/admissionregistration/v1"
        k8sioapiappsv1 "k8s.io/api/apps/v1"
@@ -59,7 +59,7 @@ func create(c kube.Client, cfg config.Config, objMeta 
metav1.ObjectMeta) (metav1
                // Use Dynamic client to access it, but reuse Istio's 
DestinationRule spec structure
                spec := 
cfg.Spec.(*orgapachedubboapinetworkingv1alpha3.DestinationRule)
                clonedSpec := protomarshal.Clone(spec)
-               obj := &apiistioioapinetworkingv1.DestinationRule{
+               obj := &apiorgapachedubboapinetworkingv1alpha3.DestinationRule{
                        ObjectMeta: objMeta,
                }
                assignSpec(&obj.Spec, clonedSpec)
@@ -106,7 +106,7 @@ func create(c kube.Client, cfg config.Config, objMeta 
metav1.ObjectMeta) (metav1
                // Use Dynamic client to access it, but reuse Istio's 
VirtualService spec structure
                spec := 
cfg.Spec.(*orgapachedubboapinetworkingv1alpha3.VirtualService)
                clonedSpec := protomarshal.Clone(spec)
-               obj := &apiistioioapinetworkingv1.VirtualService{
+               obj := &apiorgapachedubboapinetworkingv1alpha3.VirtualService{
                        ObjectMeta: objMeta,
                }
                assignSpec(&obj.Spec, clonedSpec)
@@ -152,7 +152,7 @@ func update(c kube.Client, cfg config.Config, objMeta 
metav1.ObjectMeta) (metav1
                // DestinationRule uses networking.dubbo.apache.org API group, 
use Dynamic client
                spec := 
cfg.Spec.(*orgapachedubboapinetworkingv1alpha3.DestinationRule)
                clonedSpec := protomarshal.Clone(spec)
-               obj := &apiistioioapinetworkingv1.DestinationRule{
+               obj := &apiorgapachedubboapinetworkingv1alpha3.DestinationRule{
                        ObjectMeta: objMeta,
                }
                assignSpec(&obj.Spec, clonedSpec)
@@ -197,7 +197,7 @@ func update(c kube.Client, cfg config.Config, objMeta 
metav1.ObjectMeta) (metav1
                // VirtualService uses networking.dubbo.apache.org API group, 
use Dynamic client
                spec := 
cfg.Spec.(*orgapachedubboapinetworkingv1alpha3.VirtualService)
                clonedSpec := protomarshal.Clone(spec)
-               obj := &apiistioioapinetworkingv1.VirtualService{
+               obj := &apiorgapachedubboapinetworkingv1alpha3.VirtualService{
                        ObjectMeta: objMeta,
                }
                assignSpec(&obj.Spec, clonedSpec)
@@ -242,7 +242,7 @@ func updateStatus(c kube.Client, cfg config.Config, objMeta 
metav1.ObjectMeta) (
                // DestinationRule uses networking.dubbo.apache.org API group, 
use Dynamic client
                status := cfg.Status.(*dubboapimetav1alpha1.DubboStatus)
                clonedStatus := protomarshal.Clone(status)
-               obj := &apiistioioapinetworkingv1.DestinationRule{
+               obj := &apiorgapachedubboapinetworkingv1alpha3.DestinationRule{
                        ObjectMeta: objMeta,
                }
                assignSpec(&obj.Status, clonedStatus)
@@ -287,7 +287,7 @@ func updateStatus(c kube.Client, cfg config.Config, objMeta 
metav1.ObjectMeta) (
                // VirtualService uses networking.dubbo.apache.org API group, 
use Dynamic client
                status := cfg.Status.(*dubboapimetav1alpha1.DubboStatus)
                clonedStatus := protomarshal.Clone(status)
-               obj := &apiistioioapinetworkingv1.VirtualService{
+               obj := &apiorgapachedubboapinetworkingv1alpha3.VirtualService{
                        ObjectMeta: objMeta,
                }
                assignSpec(&obj.Status, clonedStatus)
@@ -337,11 +337,11 @@ func patch(c kube.Client, orig config.Config, origMeta 
metav1.ObjectMeta, mod co
                modSpec := 
mod.Spec.(*orgapachedubboapinetworkingv1alpha3.DestinationRule)
                clonedOrigSpec := protomarshal.Clone(origSpec)
                clonedModSpec := protomarshal.Clone(modSpec)
-               oldRes := &apiistioioapinetworkingv1.DestinationRule{
+               oldRes := 
&apiorgapachedubboapinetworkingv1alpha3.DestinationRule{
                        ObjectMeta: origMeta,
                }
                assignSpec(&oldRes.Spec, clonedOrigSpec)
-               modRes := &apiistioioapinetworkingv1.DestinationRule{
+               modRes := 
&apiorgapachedubboapinetworkingv1alpha3.DestinationRule{
                        ObjectMeta: modMeta,
                }
                assignSpec(&modRes.Spec, clonedModSpec)
@@ -382,11 +382,11 @@ func patch(c kube.Client, orig config.Config, origMeta 
metav1.ObjectMeta, mod co
                modSpec := 
mod.Spec.(*orgapachedubboapinetworkingv1alpha3.VirtualService)
                clonedOrigSpec := protomarshal.Clone(origSpec)
                clonedModSpec := protomarshal.Clone(modSpec)
-               oldRes := &apiistioioapinetworkingv1.VirtualService{
+               oldRes := 
&apiorgapachedubboapinetworkingv1alpha3.VirtualService{
                        ObjectMeta: origMeta,
                }
                assignSpec(&oldRes.Spec, clonedOrigSpec)
-               modRes := &apiistioioapinetworkingv1.VirtualService{
+               modRes := 
&apiorgapachedubboapinetworkingv1alpha3.VirtualService{
                        ObjectMeta: modMeta,
                }
                assignSpec(&modRes.Spec, clonedModSpec)
@@ -560,17 +560,17 @@ var translationMap = map[config.GroupVersionKind]func(r 
runtime.Object) config.C
                }
        },
        gvk.DestinationRule: func(r runtime.Object) config.Config {
-               var obj *apiistioioapinetworkingv1.DestinationRule
+               var obj *apiorgapachedubboapinetworkingv1alpha3.DestinationRule
                // Handle unstructured objects from Dynamic client
                // First try to convert from unstructured, as Dynamic client 
returns unstructured objects
                // Note: r may be controllers.Object which embeds 
runtime.Object, so we need to check the concrete type
                switch v := r.(type) {
                case *unstructured.Unstructured:
-                       obj = &apiistioioapinetworkingv1.DestinationRule{}
+                       obj = 
&apiorgapachedubboapinetworkingv1alpha3.DestinationRule{}
                        if err := 
runtime.DefaultUnstructuredConverter.FromUnstructured(v.Object, obj); err != 
nil {
                                panic(fmt.Sprintf("failed to convert 
unstructured to DestinationRule: %v", err))
                        }
-               case *apiistioioapinetworkingv1.DestinationRule:
+               case *apiorgapachedubboapinetworkingv1alpha3.DestinationRule:
                        // Handle typed objects from Istio client
                        obj = v
                default:
@@ -578,12 +578,12 @@ var translationMap = map[config.GroupVersionKind]func(r 
runtime.Object) config.C
                        uObj, err := 
runtime.DefaultUnstructuredConverter.ToUnstructured(r)
                        if err == nil {
                                u := &unstructured.Unstructured{Object: uObj}
-                               obj = 
&apiistioioapinetworkingv1.DestinationRule{}
+                               obj = 
&apiorgapachedubboapinetworkingv1alpha3.DestinationRule{}
                                if err := 
runtime.DefaultUnstructuredConverter.FromUnstructured(u.Object, obj); err != 
nil {
                                        panic(fmt.Sprintf("failed to convert 
object %T to DestinationRule: %v", r, err))
                                }
                        } else {
-                               panic(fmt.Sprintf("unexpected object type for 
DestinationRule: %T, expected *unstructured.Unstructured or 
*apiistioioapinetworkingv1.DestinationRule, conversion error: %v", r, err))
+                               panic(fmt.Sprintf("unexpected object type for 
DestinationRule: %T, expected *unstructured.Unstructured or 
*apiorgapachedubboapinetworkingv1alpha3.DestinationRule, conversion error: %v", 
r, err))
                        }
                }
                return config.Config{
@@ -770,17 +770,17 @@ var translationMap = map[config.GroupVersionKind]func(r 
runtime.Object) config.C
                }
        },
        gvk.VirtualService: func(r runtime.Object) config.Config {
-               var obj *apiistioioapinetworkingv1.VirtualService
+               var obj *apiorgapachedubboapinetworkingv1alpha3.VirtualService
                // Handle unstructured objects from Dynamic client
                // First try to convert from unstructured, as Dynamic client 
returns unstructured objects
                // Note: r may be controllers.Object which embeds 
runtime.Object, so we need to check the concrete type
                switch v := r.(type) {
                case *unstructured.Unstructured:
-                       obj = &apiistioioapinetworkingv1.VirtualService{}
+                       obj = 
&apiorgapachedubboapinetworkingv1alpha3.VirtualService{}
                        if err := 
runtime.DefaultUnstructuredConverter.FromUnstructured(v.Object, obj); err != 
nil {
                                panic(fmt.Sprintf("failed to convert 
unstructured to VirtualService: %v", err))
                        }
-               case *apiistioioapinetworkingv1.VirtualService:
+               case *apiorgapachedubboapinetworkingv1alpha3.VirtualService:
                        // Handle typed objects from Istio client
                        obj = v
                default:
@@ -788,12 +788,12 @@ var translationMap = map[config.GroupVersionKind]func(r 
runtime.Object) config.C
                        uObj, err := 
runtime.DefaultUnstructuredConverter.ToUnstructured(r)
                        if err == nil {
                                u := &unstructured.Unstructured{Object: uObj}
-                               obj = 
&apiistioioapinetworkingv1.VirtualService{}
+                               obj = 
&apiorgapachedubboapinetworkingv1alpha3.VirtualService{}
                                if err := 
runtime.DefaultUnstructuredConverter.FromUnstructured(u.Object, obj); err != 
nil {
                                        panic(fmt.Sprintf("failed to convert 
object %T to VirtualService: %v", r, err))
                                }
                        } else {
-                               panic(fmt.Sprintf("unexpected object type for 
VirtualService: %T, expected *unstructured.Unstructured or 
*apiistioioapinetworkingv1.VirtualService, conversion error: %v", r, err))
+                               panic(fmt.Sprintf("unexpected object type for 
VirtualService: %T, expected *unstructured.Unstructured or 
*apiorgapachedubboapinetworkingv1alpha3.VirtualService, conversion error: %v", 
r, err))
                        }
                }
                return config.Config{
diff --git a/pkg/config/schema/kubeclient/common.go 
b/pkg/config/schema/kubeclient/common.go
index 428c349f..dba71e02 100644
--- a/pkg/config/schema/kubeclient/common.go
+++ b/pkg/config/schema/kubeclient/common.go
@@ -18,11 +18,11 @@ package kubeclient
 
 import (
        "context"
+       dubboclient 
"github.com/apache/dubbo-kubernetes/client-go/pkg/clientset/versioned"
        "github.com/apache/dubbo-kubernetes/pkg/config/schema/kubetypes"
        "github.com/apache/dubbo-kubernetes/pkg/kube/informerfactory"
        ktypes "github.com/apache/dubbo-kubernetes/pkg/kube/kubetypes"
        "github.com/apache/dubbo-kubernetes/pkg/typemap"
-       istioclient "istio.io/client-go/pkg/clientset/versioned"
        kubeext "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -46,7 +46,7 @@ type ClientGetter interface {
        // Dynamic client.
        Dynamic() dynamic.Interface
 
-       Dubbo() istioclient.Interface
+       Dubbo() dubboclient.Interface
 
        // Metadata returns the Metadata kube client.
        Metadata() metadata.Interface
diff --git a/pkg/config/schema/kubeclient/resources.go 
b/pkg/config/schema/kubeclient/resources.go
index 8f7beedb..1b7ad4a6 100644
--- a/pkg/config/schema/kubeclient/resources.go
+++ b/pkg/config/schema/kubeclient/resources.go
@@ -20,12 +20,12 @@ import (
        "context"
        "fmt"
 
+       apiorgapachedubboapinetworkingv1alpha3 
"github.com/apache/dubbo-kubernetes/client-go/pkg/apis/networking/v1alpha3"
        "github.com/apache/dubbo-kubernetes/pkg/config/schema/gvr"
        "github.com/apache/dubbo-kubernetes/pkg/kube/informerfactory"
        ktypes "github.com/apache/dubbo-kubernetes/pkg/kube/kubetypes"
        "github.com/apache/dubbo-kubernetes/pkg/log"
        "github.com/apache/dubbo-kubernetes/pkg/util/ptr"
-       apiistioioapinetworkingv1 "istio.io/client-go/pkg/apis/networking/v1"
        apiistioioapisecurityv1 "istio.io/client-go/pkg/apis/security/v1"
        k8sioapiadmissionregistrationv1 "k8s.io/api/admissionregistration/v1"
        k8sioapiappsv1 "k8s.io/api/apps/v1"
@@ -71,10 +71,10 @@ func GetWriteClient[T runtime.Object](c ClientGetter, 
namespace string) ktypes.W
                return 
c.Kube().CoreV1().ServiceAccounts(namespace).(ktypes.WriteAPI[T])
        case *apiistioioapisecurityv1.PeerAuthentication:
                return 
c.Dubbo().SecurityV1().PeerAuthentications(namespace).(ktypes.WriteAPI[T])
-       case *apiistioioapinetworkingv1.VirtualService:
-               return 
c.Dubbo().NetworkingV1().VirtualServices(namespace).(ktypes.WriteAPI[T])
-       case *apiistioioapinetworkingv1.DestinationRule:
-               return 
c.Dubbo().NetworkingV1().DestinationRules(namespace).(ktypes.WriteAPI[T])
+       case *apiorgapachedubboapinetworkingv1alpha3.VirtualService:
+               return 
c.Dubbo().NetworkingV1alpha3().VirtualServices(namespace).(ktypes.WriteAPI[T])
+       case *apiorgapachedubboapinetworkingv1alpha3.DestinationRule:
+               return 
c.Dubbo().NetworkingV1alpha3().DestinationRules(namespace).(ktypes.WriteAPI[T])
        case *sigsk8siogatewayapiapisv1.GatewayClass:
                return 
c.GatewayAPI().GatewayV1().GatewayClasses().(ktypes.WriteAPI[T])
        case *sigsk8siogatewayapiapisv1.Gateway:
@@ -119,9 +119,9 @@ func gvrToObject(g schema.GroupVersionResource) 
runtime.Object {
        case gvr.PeerAuthentication:
                return &apiistioioapisecurityv1.PeerAuthentication{}
        case gvr.VirtualService:
-               return &apiistioioapinetworkingv1.VirtualService{}
+               return &apiorgapachedubboapinetworkingv1alpha3.VirtualService{}
        case gvr.DestinationRule:
-               return &apiistioioapinetworkingv1.DestinationRule{}
+               return &apiorgapachedubboapinetworkingv1alpha3.DestinationRule{}
        case gvr.GatewayClass:
                return &sigsk8siogatewayapiapisv1.GatewayClass{}
        case gvr.KubernetesGateway:
diff --git a/pkg/config/schema/kubetypes/resources.go 
b/pkg/config/schema/kubetypes/resources.go
index b13d79c5..b8072c87 100644
--- a/pkg/config/schema/kubetypes/resources.go
+++ b/pkg/config/schema/kubetypes/resources.go
@@ -18,9 +18,9 @@ package kubetypes
 
 import (
        dubboapimeshv1alpha1 
"github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
+       apiorgapachedubboapinetworkingv1alpha3 
"github.com/apache/dubbo-kubernetes/client-go/pkg/apis/networking/v1alpha3"
        "github.com/apache/dubbo-kubernetes/pkg/config"
        "github.com/apache/dubbo-kubernetes/pkg/config/schema/gvk"
-       apiistioioapinetworkingv1 "istio.io/client-go/pkg/apis/networking/v1"
        apiistioioapisecurityv1 "istio.io/client-go/pkg/apis/security/v1"
        k8sioapiadmissionregistrationv1 "k8s.io/api/admissionregistration/v1"
        k8sioapiappsv1 "k8s.io/api/apps/v1"
@@ -40,9 +40,9 @@ func getGvk(obj any) (config.GroupVersionKind, bool) {
                return gvk.MeshGlobalConfig, true
        case *apiistioioapisecurityv1.PeerAuthentication:
                return gvk.PeerAuthentication, true
-       case *apiistioioapinetworkingv1.DestinationRule:
+       case *apiorgapachedubboapinetworkingv1alpha3.DestinationRule:
                return gvk.DestinationRule, true
-       case *apiistioioapinetworkingv1.VirtualService:
+       case *apiorgapachedubboapinetworkingv1alpha3.VirtualService:
                return gvk.VirtualService, true
        case *k8sioapicorev1.ConfigMap:
                return gvk.ConfigMap, true
diff --git a/pkg/kube/client.go b/pkg/kube/client.go
index 123e4207..c55e030a 100644
--- a/pkg/kube/client.go
+++ b/pkg/kube/client.go
@@ -23,6 +23,7 @@ import (
        gatewayapiclient 
"sigs.k8s.io/gateway-api/pkg/client/clientset/versioned"
        "time"
 
+       dubboclient 
"github.com/apache/dubbo-kubernetes/client-go/pkg/clientset/versioned"
        "github.com/apache/dubbo-kubernetes/pkg/cluster"
        "github.com/apache/dubbo-kubernetes/pkg/config"
        "github.com/apache/dubbo-kubernetes/pkg/config/schema/collections"
@@ -31,7 +32,6 @@ import (
        "github.com/apache/dubbo-kubernetes/pkg/lazy"
        "github.com/apache/dubbo-kubernetes/pkg/sleep"
        "go.uber.org/atomic"
-       istioclient "istio.io/client-go/pkg/clientset/versioned"
        kubeExtClient 
"k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
        "k8s.io/apimachinery/pkg/api/meta"
        "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -68,7 +68,7 @@ type client struct {
        clusterID              cluster.ID
        informerWatchesPending *atomic.Int32
        started                atomic.Bool
-       dubbo                  istioclient.Interface
+       dubbo                  dubboclient.Interface
        gatewayapi             gatewayapiclient.Interface
        crdWatcher             kubetypes.CrdWatcher
        fastSync               bool
@@ -87,7 +87,7 @@ type Client interface {
 
        Informers() informerfactory.InformerFactory
 
-       Dubbo() istioclient.Interface
+       Dubbo() dubboclient.Interface
 
        ObjectFilter() kubetypes.DynamicObjectFilter
 
@@ -157,7 +157,7 @@ func newClientInternal(clientFactory *clientFactory, opts 
...ClientOption) (*cli
                return nil, err
        }
 
-       c.dubbo, err = istioclient.NewForConfig(c.config)
+       c.dubbo, err = dubboclient.NewForConfig(c.config)
        if err != nil {
                return nil, err
        }
@@ -243,7 +243,7 @@ func (c *client) Informers() 
informerfactory.InformerFactory {
        return c.informerFactory
 }
 
-func (c *client) Dubbo() istioclient.Interface {
+func (c *client) Dubbo() dubboclient.Interface {
        return c.dubbo
 }
 

Reply via email to