main
kzkzzzz 2025-12-12 23:38:37 +08:00
parent bd62ff8235
commit 10e037243f
2 changed files with 28 additions and 4 deletions

View File

@ -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
}
}

View File

@ -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
}
}