package rpc import ( "context" "fmt" "runtime" "time" "github.com/TremblingV5/DouTok/kitex_gen/relation" "github.com/TremblingV5/DouTok/kitex_gen/relation/relationservice" "github.com/TremblingV5/DouTok/pkg/dtviper" "github.com/TremblingV5/DouTok/pkg/errno" "github.com/TremblingV5/DouTok/pkg/middleware" "github.com/cloudwego/kitex/client" "github.com/cloudwego/kitex/pkg/remote/trans/gonet" "github.com/cloudwego/kitex/pkg/retry" "github.com/cloudwego/kitex/pkg/rpcinfo" "github.com/kitex-contrib/obs-opentelemetry/tracing" etcd "github.com/kitex-contrib/registry-etcd" ) var RelationClient relationservice.Client // Relation RPC 客户端初始化 func initRelationRpc(Config *dtviper.Config) { EtcdAddress := fmt.Sprintf("%s:%d", Config.Viper.GetString("Etcd.Address"), Config.Viper.GetInt("Etcd.Port")) r, err := etcd.NewEtcdResolver([]string{EtcdAddress}) if err != nil { panic(err) } ServiceName := Config.Viper.GetString("Server.Name") //p := provider.NewOpenTelemetryProvider( // provider.WithServiceName(ServiceName), // provider.WithExportEndpoint("localhost:4317"), // provider.WithInsecure(), //) //defer p.Shutdown(context.Background()) options := []client.Option{ client.WithMiddleware(middleware.CommonMiddleware), client.WithInstanceMW(middleware.ClientMiddleware), client.WithRPCTimeout(30 * time.Second), // rpc timeout client.WithConnectTimeout(30000 * time.Millisecond), // conn timeout client.WithFailureRetry(retry.NewFailurePolicy()), // retry client.WithSuite(tracing.NewClientSuite()), // tracer client.WithResolver(r), // resolver // Please keep the same as provider.WithServiceName client.WithClientBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: ServiceName}), } if runtime.GOOS == "windows" { options = append(options, client.WithTransHandlerFactory(gonet.NewCliTransHandlerFactory())) } else { options = append(options, client.WithMuxConnection(1)) // mux } c, err := relationservice.NewClient( ServiceName, options..., ) if err != nil { panic(err) } RelationClient = c } // 传递 关注操作 的上下文, 并获取 RPC Server 端的响应. func RelationAction(ctx context.Context, relationClient relationservice.Client, req *relation.DouyinRelationActionRequest) (resp *relation.DouyinRelationActionResponse, err error) { resp, err = relationClient.RelationAction(ctx, req) if err != nil { return nil, err } if resp.StatusCode != 0 { return nil, errno.NewErrNo(int(resp.StatusCode), resp.StatusMsg) } return resp, nil } // 传递 获取正在关注列表操作 的上下文, 并获取 RPC Server 端的响应. func RelationFollowList(ctx context.Context, relationClient relationservice.Client, req *relation.DouyinRelationFollowListRequest) (resp *relation.DouyinRelationFollowListResponse, err error) { resp, err = relationClient.RelationFollowList(ctx, req) if err != nil { return nil, err } if resp.StatusCode != 0 { return nil, errno.NewErrNo(int(resp.StatusCode), resp.StatusMsg) } return resp, nil } // 传递 获取粉丝列表操作 的上下文, 并获取 RPC Server 端的响应. func RelationFollowerList(ctx context.Context, relationClient relationservice.Client, req *relation.DouyinRelationFollowerListRequest) (resp *relation.DouyinRelationFollowerListResponse, err error) { resp, err = relationClient.RelationFollowerList(ctx, req) if err != nil { return nil, err } if resp.StatusCode != 0 { return nil, errno.NewErrNo(int(resp.StatusCode), resp.StatusMsg) } return resp, nil } // 传递 获取好友列表操作 的上下文, 并获取 RPC Server 端的响应. func RelationFriendList(ctx context.Context, relationClient relationservice.Client, req *relation.DouyinRelationFriendListRequest) (resp *relation.DouyinRelationFriendListResponse, err error) { resp, err = relationClient.RelationFriendList(ctx, req) if err != nil { return nil, err } if resp.StatusCode != 0 { return nil, errno.NewErrNo(int(resp.StatusCode), resp.StatusMsg) } return resp, nil }