H5W3
当前位置:H5W3 > go > 正文

【go】thrift客户端定义连接、协议部分和调用部分分离

最近在用go开发thrift客户端,目前客户端一个方法如下:
1  go func() {
2
3         transportFactory := thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory())
4         protocolFactory := thrift.NewTBinaryProtocolFactoryDefault()
5
6         tSocket, err := thrift.NewTSocket(net.JoinHostPort(ip, port))
7         if err != nil {
8                 fmt.Fprintln(os.Stderr, "Error resolving address, ", err)
9                 os.Exit(1)
10        }
11
12        tTransport, _ := transportFactory.GetTransport(tSocket)
13
14        client := FundInfo.NewFundInfoServiceClientFactory(tTransport, protocolFactory)
15        if err := tTransport.Open(); err != nil {
16                fmt.Fprintln(os.Stderr, (fmt.Errorf("Error opening socket to %s:%s : %v", ip, port, err)))
17                os.Exit(1)
18        }
19
20        defer tTransport.Close()
21
22        res, err :=  client.GetFundInfo(ctx, fundcode)
23        Chan <- res
24 }()
方法中第3-20行定义的是socket连接、传输协议等,只有第22行是实际调用服务端方法。
请问能否将前面部分与实际调用部分分离?不然在每个客户端方法中都得定义这些,太显得允余。
望大神指点,谢谢。
目前我自己想的一个方案是,在util目录下定义一个fundInfoServiceClient.go文件,文件中方法如下:
func FundInfoServiceClient() (*FundInfo.FundInfoServiceClient, thrift.TTransport)  {
transportFactory := thrift.NewTFramedTransportFactory(thrift.NewTTransportFactory())
protocolFactory := thrift.NewTBinaryProtocolFactoryDefault()
tSocket, err := thrift.NewTSocket(net.JoinHostPort(ip, port))
if err != nil {
fmt.Fprintln(os.Stderr, "Error resolving address, ", err)
os.Exit(1)
}
tTransport, _ := transportFactory.GetTransport(tSocket)
client :=FundInfo.NewFundInfoServiceClientFactory(tTransport, protocolFactory)
if err := tTransport.Open(); err != nil {
fmt.Fprintln(os.Stderr, (fmt.Errorf("Error opening socket to %s:%s : %v", ip, port, err)))
os.Exit(1)
}
return client, tTransport
}
然后实际调用处方法:
go func() {
client, tTransport := util.FundInfoServiceClient()
defer tTransport.Close()
res, _ := client.GetFundInfo(ctx, fundcode)
Chan <- res
}()
当客户端调用其它方法时,只需要选择所属的serviceClient,并将res, _ := client.GetFundInfo(ctx, fundcode)替换成要调用的方法名即可。
如果各位有什么更好的方案,欢迎指出哈!

回答

本文地址:H5W3 » 【go】thrift客户端定义连接、协议部分和调用部分分离

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址