Kitex微服务通信

2024-01-17T14:21:02+08:00 | 1分钟阅读 | 更新于 2024-01-17T14:21:02+08:00

@

一、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)
}
About Me

没什么想介绍的,一个很大众的码农…

喜欢代码,车,马,真的是 🐎

讨厌别人让我给自己的代码写注释 最厌烦别人的程序没有写注释

目标

学AI,加油!加油!