一、thrift
服务端
info:= rpcinfo.GetRPCInfo(ctx)
fmt.Println(info.From().ServiceName())
客户端
package main
import (
"context"
"fmt"
"github.com/cloudwego/biz-demo/gomall/demo/demo temporada"
"github.com/cloudwego/biz-demo/gomall/demo/demo/demoht/kitex_gen/api/echo"
"github.com/cloudwego/kitex/client"
"github.com/cloudwego/kitex/pkg/rcinfo"
"github.com/cloudwego/kitex/pkg/transmeta"
"github.com/cloutex/transport"
)
func main() {
cli, err := echo.NewClient("demo_thrift", client.WithHostPorts("localhost:8888"),
client.WithMetaHandler(transmeta.clientTDHeraderHandler),
client.WithTransportProtocol(transport.TTHeader),
client.WithClientBasiInfo(&rpcinfo.EndpointBasicInfo{
ServiceName: "demo thrift client",
}),
)
if err != nil {
panic(err)
}
res, err := cli.Echo(contextext.Background(), &api.Request{
Message: "hello",
})
if err != nil {
fmt.Println(err)
}
fmt.Printf("%v", res)
}
二、gRPC
服务端
clientName, ok := metainfo.GetPersistentValue(s.ctx, "CLIENT_NAME")
fmt.Println(clientName, ok)
客户端
import (
"context"
"fmt"
"github.com/bytedance/gopkg/cloud/metainfo"
"github.com/cloudwego/biz-demo/gomall/demo/demo_proto/conf"
"github.com/cloudwego/biz-demo/gomall/demo/demo_proto/kitex_gen/pbapi"
"github.com/cloudwego/biz-demo/gomall/demo/demo_proto/kitex_gen/pbapi/echo"
"github.com/cloudwego/kitex/client"
"github.com/cloudwego/kitex/pkg/klog"
"github.com/cloudwego/kitex/pkg/transmeta"
"github.com/cloudwego/kitex/transport"
consul "github.com/kitex-contrib/registry-consul"
)
func main() {
// 1. 初始化 Consul 服务解析器
r, err := consul.NewConsulResolver(conf.GetConf().Registry.RegistryAddress[0](@ref)
if err != nil {
panic(err)
}
// 2. 初始化 Kitex 客户端(调用 demo_proto 服务的 Echo 方法)
c, err := echo.NewClient(
"demo_proto",
client.WithResolver(r), // 服务注册中心解析器(Consul)
client.WithTransportProtocol(transport.GRPC), // 传输协议:gRPC
client.WithMetaHandler(transmeta.ClientHTTP2Handler), // 元数据处理器
)
if err!= nil {
panic(err)
}
// 3. 构造带持久化元数据的上下文(传递 CLIENT_NAME)
ctx := metainfo.WithPersistentValue(
context.Background(),
"CLIENT_NAME",
"demo_proto_client",
)
// 4. 调用服务端 Echo 方法
res, err := c.Echo(ctx, &pbapi.Request{Message: "hello"})
if err != nil {
klog.Fatal(err) // 日志记录 + 终止程序
}
// 5. 打印响应结果
fmt.Printf("%v", res)
}
三、错误传递
服务端
kerrors.NewGRPCBizStatusError(1004001,"client params error")
客户端
var bizErr *kerrerrs.GRPCBizStatusError
if err != nil {
ok := errors.As(err, &bizErr)
if ok {
fmt.Printf("%#v", bizErr)
}
klog.Fatal(err)
}