update
parent
bd62ff8235
commit
10e037243f
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue