-
Notifications
You must be signed in to change notification settings - Fork 2
/
utils.go
70 lines (63 loc) · 2.22 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package utils
import (
"context"
"fmt"
"github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/common/adaptor"
"github.com/cloudwego/kitex/client"
"github.com/cloudwego/kitex/client/genericclient"
"github.com/cloudwego/kitex/pkg/connpool"
"github.com/cloudwego/kitex/pkg/discovery"
"github.com/cloudwego/kitex/pkg/generic"
etcd "github.com/kitex-contrib/registry-etcd"
"log"
)
func NewResolver() discovery.Resolver {
r, err := etcd.NewEtcdResolver([]string{"localhost:2379"})
if err != nil {
log.Fatal("Error: fail to new etcd resolver---" + err.Error())
}
return r
}
func NewProvider(content string) *generic.ThriftContentProvider {
p, err := generic.NewThriftContentProvider(content, map[string]string{})
if err != nil {
panic("Error: fail to load the thrift file " + err.Error())
}
return p
}
func NewClient(destServiceName string, provider *generic.ThriftContentProvider, resolver discovery.Resolver) genericclient.Client {
g, err := generic.HTTPThriftGeneric(provider)
if err != nil {
panic("Error: fail to generic thrift " + err.Error())
}
var opts []client.Option
opts = append(opts, client.WithResolver(resolver))
opts = append(opts, client.WithLongConnection(connpool.IdleConfig{
MaxIdlePerAddress: 1000,
MaxIdleGlobal: 1000 * 10,
}))
opts = append(opts, client.WithTag("Cluster", destServiceName+"Cluster"))
cli, err := genericclient.NewClient(destServiceName, g, opts...)
if err != nil {
panic("Error: fail to establish the client " + err.Error())
}
return cli
}
func GetHTTPGenericResponse(ctx context.Context, c *app.RequestContext, methodName string, cli genericclient.Client) *generic.HTTPResponse {
httpReq, err := adaptor.GetCompatRequest(c.GetRequest())
customReq, err := generic.FromHTTPRequest(httpReq)
if err != nil {
panic("Error: fail to generic from hertz request " + err.Error())
}
// customReq *generic.HttpRequest
// 由于 hertz 泛化的 method 是通过 bam 规则从 hertz request 中获取的,所以填空就行
fmt.Println(string(c.GetRequest().Body()))
fmt.Println(cli)
resp, err := cli.GenericCall(ctx, methodName, customReq)
if err != nil {
panic("Error: fail to generic call " + err.Error())
}
realResp := resp.(*generic.HTTPResponse)
return realResp
}