From 35327c62a3e6b62f81ebe1c45c86226defb5dda5 Mon Sep 17 00:00:00 2001 From: sk Date: Tue, 2 Jun 2026 13:59:07 +0800 Subject: [PATCH] fix grpc and rpcx transporters builder no discovery client error --- transport/grpc/transporter.go | 16 ++++++++++++++-- transport/rpcx/transporter.go | 16 ++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/transport/grpc/transporter.go b/transport/grpc/transporter.go index 7f2b403a..1b394a0f 100644 --- a/transport/grpc/transporter.go +++ b/transport/grpc/transporter.go @@ -1,11 +1,13 @@ package grpc import ( + "sync" + "github.com/dobyte/due/transport/grpc/v2/internal/client" "github.com/dobyte/due/transport/grpc/v2/internal/server" + "github.com/dobyte/due/v2/errors" "github.com/dobyte/due/v2/registry" "github.com/dobyte/due/v2/transport" - "sync" ) const name = "grpc" @@ -48,10 +50,20 @@ func (t *Transporter) NewServer() (transport.Server, error) { // 服务直连模式: direct://711baf8d-8a06-11ef-b7df-f4f19e1f0070 // 服务发现模式: discovery://service_name func (t *Transporter) NewClient(target string) (transport.Client, error) { + var err error + t.once.Do(func() { - t.builder = client.NewBuilder(&t.opts.client) + if t.opts.client.Discovery == nil { + err = errors.New("grpc discovery client is not ready") + } else { + t.builder = client.NewBuilder(&t.opts.client) + } }) + if err != nil { + return nil, err + } + cc, err := t.builder.Build(target) if err != nil { return nil, err diff --git a/transport/rpcx/transporter.go b/transport/rpcx/transporter.go index 71f650bb..db02d106 100644 --- a/transport/rpcx/transporter.go +++ b/transport/rpcx/transporter.go @@ -1,12 +1,14 @@ package rpcx import ( + "sync" + "github.com/dobyte/due/transport/rpcx/v2/internal/client" "github.com/dobyte/due/transport/rpcx/v2/internal/logger" "github.com/dobyte/due/transport/rpcx/v2/internal/server" + "github.com/dobyte/due/v2/errors" "github.com/dobyte/due/v2/registry" "github.com/dobyte/due/v2/transport" - "sync" ) const name = "rpcx" @@ -51,10 +53,20 @@ func (t *Transporter) NewServer() (transport.Server, error) { // 服务直连模式: direct://711baf8d-8a06-11ef-b7df-f4f19e1f0070 // 服务发现模式: discovery://service_name func (t *Transporter) NewClient(target string) (transport.Client, error) { + var err error + t.once.Do(func() { - t.builder = client.NewBuilder(&t.opts.client) + if t.opts.client.Discovery == nil { + err = errors.New("rpcx discovery client is not ready") + } else { + t.builder = client.NewBuilder(&t.opts.client) + } }) + if err != nil { + return nil, err + } + cli, err := t.builder.Build(target) if err != nil { return nil, err