You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

111 lines
4.0 KiB

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
}