From 10e037243f205445e5507e0348b1f16a3bd8430a Mon Sep 17 00:00:00 2001 From: kzkzzzz Date: Fri, 12 Dec 2025 23:38:37 +0800 Subject: [PATCH] update --- mygrpc/grpcsr/server.go | 20 +++++++++++++++++++- myregistry/consul/builder.go | 12 +++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/mygrpc/grpcsr/server.go b/mygrpc/grpcsr/server.go index f6368cf..5e61c18 100644 --- a/mygrpc/grpcsr/server.go +++ b/mygrpc/grpcsr/server.go @@ -15,6 +15,7 @@ import ( "google.golang.org/grpc/health" "google.golang.org/grpc/health/grpc_health_v1" "google.golang.org/grpc/keepalive" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/reflection" "google.golang.org/grpc/status" "log" @@ -39,6 +40,7 @@ type Opt func(server *Server) type Server struct { gs *grpc.Server + serviceAddr string serviceId string serviceName string serverConf *Conf @@ -221,6 +223,8 @@ func (s *Server) Run(ctx context.Context) error { addr := fmt.Sprintf("%s:%d", s.serverConf.Addr, port) log.Printf("grpc server listen on %s", addr) + s.serviceAddr = fmt.Sprintf("%s:%d", svcIp, port) + err = s.gs.Serve(lis) if err != nil { log.Printf("start grpc server err: %s", err) @@ -297,6 +301,14 @@ func (s *Server) requestLog() grpc.UnaryServerInterceptor { func (s *Server) grpcRecover() grpc.UnaryServerInterceptor { return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { + md := metadata.New(map[string]string{ + "service-host": mycommon.GetHostName(), + "service-addr": s.serviceAddr, + "service-name": s.serviceName, + "service-method": info.FullMethod, + }) + grpc.SetHeader(ctx, md) + defer func() { if err0 := recover(); err0 != nil { log.Printf("%s - panic: %v\n%s", info.FullMethod, err0, debug.Stack()) @@ -304,7 +316,13 @@ func (s *Server) grpcRecover() grpc.UnaryServerInterceptor { } }() - return handler(ctx, req) + res, err := handler(ctx, req) + if err != nil { + fmt.Println("set header") + return nil, err + } + + return res, nil } } diff --git a/myregistry/consul/builder.go b/myregistry/consul/builder.go index b32a647..1128a5c 100644 --- a/myregistry/consul/builder.go +++ b/myregistry/consul/builder.go @@ -7,6 +7,7 @@ import ( "google.golang.org/grpc/grpclog" "log" "sort" + "strings" "time" "github.com/hashicorp/consul/api" @@ -172,15 +173,20 @@ func populateEndpoints(ctx context.Context, clientConn resolver.ClientConn, inpu sort.Sort(byAddressString(conns)) // Don't replace the same address list in the balancer - log.Printf("update conn: %s - %s", tgt.Service, conns) + connInfo := make([]string, 0, len(conns)) + for _, conn := range conns { + connInfo = append(connInfo, conn.Addr) + } + + log.Printf("update conn: %s num:%d [%s]", tgt.Service, len(connInfo), strings.Join(connInfo, ", ")) err := clientConn.UpdateState(resolver.State{Addresses: conns}) if err != nil { - grpclog.Errorf("[Consul resolver] Couldn't update client connection. error={%v}", err) + grpclog.Errorf("[Consul resolver %s] Couldn't update client connection. error={%v}", tgt.Service, err) continue } case <-ctx.Done(): - grpclog.Info("[Consul resolver] Watch has been finished") + grpclog.Infof("[Consul resolver %s] Watch has been finished", tgt.Service) return } }