【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)替换成要调用的方法名即可。

如果各位有什么更好的方案,欢迎指出哈!

回答

以上是 【go】thrift客户端定义连接、协议部分和调用部分分离 的全部内容, 来源链接: www.h5w3.com/114261.html

回到顶部