Skip to content

Commit 8761f25

Browse files
committed
fix(orb/transport/hertz): Unify it.
1 parent 614ad67 commit 8761f25

11 files changed

Lines changed: 172 additions & 346 deletions

File tree

client/orb/transport/basehertz/go.sum

Lines changed: 0 additions & 90 deletions
This file was deleted.
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
module github.com/go-orb/plugins-experimental/client/orb/transport/basehertz
1+
module github.com/go-orb/plugins-experimental/client/orb/transport/hertz
22

33
go 1.23.6
44

55
require (
66
github.com/cloudwego/hertz v0.9.6
7-
github.com/go-orb/go-orb v0.2.2-0.20250311132430-0e33342756e5
8-
github.com/go-orb/plugins/client/orb v0.1.4-0.20250311132830-02df1246ed3c
7+
github.com/go-orb/go-orb v0.2.2-0.20250312045201-e171cd320e7d
8+
github.com/go-orb/plugins/client/orb v0.1.4-0.20250312035037-3fa335cd21fa
9+
github.com/hertz-contrib/http2 v0.1.8
910
)
1011

1112
require (
@@ -26,6 +27,7 @@ require (
2627
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
2728
golang.org/x/arch v0.15.0 // indirect
2829
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect
30+
golang.org/x/net v0.37.0 // indirect
2931
golang.org/x/sys v0.31.0 // indirect
3032
golang.org/x/text v0.23.0 // indirect
3133
google.golang.org/protobuf v1.36.5 // indirect
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@ github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/
2525
github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
2626
github.com/go-orb/go-orb v0.2.2-0.20250311132430-0e33342756e5 h1:mj8nSHiIy9QeEHsh7MJF/GgVrfZTu9bsO65QklAoPf4=
2727
github.com/go-orb/go-orb v0.2.2-0.20250311132430-0e33342756e5/go.mod h1:UgBB26ldvzHNjg6721K2o5DEM6qX44ZHqCW0SanoAFA=
28-
github.com/go-orb/plugins-experimental/client/orb/transport/basehertz v0.0.0-20250311030251-33347369bbe1 h1:O5lBx3vXhiFxXROoW7B5DpvTU82AYsmUB5XN52mg+9E=
29-
github.com/go-orb/plugins-experimental/client/orb/transport/basehertz v0.0.0-20250311030251-33347369bbe1/go.mod h1:/1qedlGuSfESyN68LWIqZivS/YBpL3LzwYYSEMir+34=
28+
github.com/go-orb/go-orb v0.2.2-0.20250312045201-e171cd320e7d h1:VRIW2H+ub5qywAreNHYPWiwdHGVPO6nUChlpHXgR8ak=
29+
github.com/go-orb/go-orb v0.2.2-0.20250312045201-e171cd320e7d/go.mod h1:UgBB26ldvzHNjg6721K2o5DEM6qX44ZHqCW0SanoAFA=
3030
github.com/go-orb/plugins/client/orb v0.1.4-0.20250311132830-02df1246ed3c h1:B5LJD+SsycshuEqwhg0hbNutGvSF6yGPf/4XqCnBQNE=
3131
github.com/go-orb/plugins/client/orb v0.1.4-0.20250311132830-02df1246ed3c/go.mod h1:pU/m5xCBVq6tv/YtcfdhW7xyNiR4MvOzHGN9k00biUY=
32+
github.com/go-orb/plugins/client/orb v0.1.4-0.20250312035037-3fa335cd21fa h1:EL8p4Nkdw+n2ULlQzrSkKj9nBac59uVymQ1zH+sv9dw=
33+
github.com/go-orb/plugins/client/orb v0.1.4-0.20250312035037-3fa335cd21fa/go.mod h1:pU/m5xCBVq6tv/YtcfdhW7xyNiR4MvOzHGN9k00biUY=
3234
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
3335
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
3436
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=

client/orb/transport/basehertz/basehertz.go renamed to client/orb/transport/hertz/hertz.go

Lines changed: 57 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// Package basehertz contains a base transport which is used by hertz transports.
2-
package basehertz
1+
// Package hertz contains the hertz transport for the orb client.
2+
package hertz
33

44
import (
55
"bytes"
@@ -11,6 +11,8 @@ import (
1111
hclient "github.com/cloudwego/hertz/pkg/app/client"
1212
"github.com/cloudwego/hertz/pkg/protocol"
1313
"github.com/cloudwego/hertz/pkg/protocol/consts"
14+
"github.com/hertz-contrib/http2/config"
15+
"github.com/hertz-contrib/http2/factory"
1416

1517
"github.com/go-orb/go-orb/client"
1618
"github.com/go-orb/go-orb/codecs"
@@ -20,6 +22,11 @@ import (
2022
"github.com/go-orb/plugins/client/orb"
2123
)
2224

25+
func init() {
26+
orb.RegisterTransport("hertzh2c", NewH2CTransport)
27+
orb.RegisterTransport("hertzhttp", NewHTTPTransport)
28+
}
29+
2330
//nolint:gochecknoglobals
2431
var stdHeaders = []string{"Content-Length", "Content-Type", "Date", "Server"}
2532

@@ -59,33 +66,29 @@ func (t *Transport) Name() string {
5966
// Request does the actual rpc request to the server.
6067
func (t *Transport) Request(
6168
ctx context.Context,
62-
req *client.Req[any, any],
69+
infos client.RequestInfos,
70+
req any,
6371
result any,
6472
opts *client.CallOptions,
6573
) error {
66-
codec, err := codecs.GetEncoder(opts.ContentType, req.Req())
74+
codec, err := codecs.GetEncoder(opts.ContentType, req)
6775
if err != nil {
6876
return orberrors.ErrBadRequest.Wrap(err)
6977
}
7078

7179
// Encode the request into a *bytes.Buffer{}.
7280
buff := bytes.NewBuffer(nil)
73-
if err := codec.NewEncoder(buff).Encode(req.Req()); err != nil {
81+
if err := codec.NewEncoder(buff).Encode(req); err != nil {
7482
return orberrors.ErrBadRequest.Wrap(err)
7583
}
7684

77-
node, err := req.Node(ctx, opts)
78-
if err != nil {
79-
return orberrors.From(err)
80-
}
81-
8285
// Create a hertz request.
8386
hReq := &protocol.Request{}
8487
hReq.SetMethod(consts.MethodPost)
8588
hReq.SetBodyStream(buff, buff.Len())
8689
hReq.Header.SetContentTypeBytes([]byte(opts.ContentType))
8790
hReq.Header.Set("Accept", opts.ContentType)
88-
hReq.SetRequestURI(fmt.Sprintf("%s://%s%s", t.scheme, node.Address, req.Endpoint()))
91+
hReq.SetRequestURI(fmt.Sprintf("%s://%s%s", t.scheme, infos.Address, infos.Endpoint))
8992

9093
// Set metadata key=value to request headers.
9194
md, ok := metadata.Outgoing(ctx)
@@ -142,6 +145,12 @@ func (t *Transport) Request(
142145
return nil
143146
}
144147

148+
// Stream creates a bidirectional stream to the service endpoint.
149+
// Hertz transport does not support streaming operations by default.
150+
func (t *Transport) Stream(_ context.Context, _ client.RequestInfos, _ *client.CallOptions) (client.StreamIface[any, any], error) {
151+
return nil, orberrors.HTTP(501).Wrap(client.ErrStreamNotSupported)
152+
}
153+
145154
// NewTransport creates a Transport with a custom http.Client.
146155
func NewTransport(name string, logger log.Logger, scheme string, clientCreator TransportClientCreator,
147156
) (orb.TransportType, error) {
@@ -152,3 +161,40 @@ func NewTransport(name string, logger log.Logger, scheme string, clientCreator T
152161
clientCreator: clientCreator,
153162
}}, nil
154163
}
164+
165+
// NewH2CTransport creates a new hertz http transport for the orb client.
166+
func NewH2CTransport(logger log.Logger, cfg *orb.Config) (orb.TransportType, error) {
167+
return NewTransport(
168+
"hertzh2c",
169+
logger,
170+
"http",
171+
func() (*hclient.Client, error) {
172+
c, err := hclient.NewClient(
173+
hclient.WithNoDefaultUserAgentHeader(true),
174+
hclient.WithMaxConnsPerHost(cfg.PoolSize),
175+
)
176+
if err != nil {
177+
return nil, err
178+
}
179+
180+
c.SetClientFactory(factory.NewClientFactory(config.WithAllowHTTP(true)))
181+
182+
return c, nil
183+
},
184+
)
185+
}
186+
187+
// NewHTTPTransport creates a new hertz http transport for the orb client.
188+
func NewHTTPTransport(logger log.Logger, cfg *orb.Config) (orb.TransportType, error) {
189+
return NewTransport(
190+
"hertzhttp",
191+
logger,
192+
"http",
193+
func() (*hclient.Client, error) {
194+
return hclient.NewClient(
195+
hclient.WithNoDefaultUserAgentHeader(true),
196+
hclient.WithMaxConnsPerHost(cfg.PoolSize),
197+
)
198+
},
199+
)
200+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package hertz
2+
3+
import (
4+
"context"
5+
"os"
6+
"testing"
7+
8+
"github.com/go-orb/go-orb/log"
9+
"github.com/go-orb/go-orb/registry"
10+
"github.com/go-orb/go-orb/server"
11+
"github.com/go-orb/go-orb/types"
12+
"github.com/go-orb/plugins/client/tests"
13+
"github.com/stretchr/testify/suite"
14+
15+
"github.com/go-orb/plugins-experimental/server/hertz"
16+
17+
echohandler "github.com/go-orb/plugins/client/tests/handler/echo"
18+
echoproto "github.com/go-orb/plugins/client/tests/proto/echo"
19+
20+
// Blank imports here are fine.
21+
_ "github.com/go-orb/plugins-experimental/registry/mdns"
22+
_ "github.com/go-orb/plugins/codecs/json"
23+
_ "github.com/go-orb/plugins/codecs/proto"
24+
_ "github.com/go-orb/plugins/codecs/yaml"
25+
_ "github.com/go-orb/plugins/log/slog"
26+
)
27+
28+
func setupServer(sn types.ServiceName) (*tests.SetupData, error) {
29+
ctx, cancel := context.WithCancel(context.Background())
30+
31+
setupData := &tests.SetupData{}
32+
33+
sv := types.ServiceVersion("")
34+
35+
logger, err := log.New()
36+
if err != nil {
37+
cancel()
38+
39+
return nil, err
40+
}
41+
42+
reg, err := registry.New(sn, sv, &types.Components{}, registry.NewConfig(), nil, []string{}, logger)
43+
if err != nil {
44+
cancel()
45+
46+
return nil, err
47+
}
48+
49+
hInstance := new(echohandler.Handler)
50+
hRegister := echoproto.RegisterStreamsHandler(hInstance)
51+
52+
ep1, err := hertz.New(
53+
hertz.NewConfig(
54+
server.WithEntrypointName("http"),
55+
hertz.WithHandlers(hRegister),
56+
hertz.WithInsecure(),
57+
),
58+
logger,
59+
reg,
60+
)
61+
if err != nil {
62+
cancel()
63+
64+
return nil, err
65+
}
66+
67+
ep2, err := hertz.New(
68+
hertz.NewConfig(
69+
server.WithEntrypointName("h2c"),
70+
hertz.WithHandlers(hRegister),
71+
hertz.WithInsecure(),
72+
hertz.WithAllowH2C(),
73+
),
74+
logger,
75+
reg,
76+
)
77+
if err != nil {
78+
cancel()
79+
80+
return nil, err
81+
}
82+
83+
setupData.Logger = logger
84+
setupData.Registry = reg
85+
setupData.Entrypoints = []server.Entrypoint{ep1, ep2}
86+
setupData.Ctx = ctx
87+
setupData.Stop = cancel
88+
89+
return setupData, nil
90+
}
91+
92+
func newSuite() *tests.TestSuite {
93+
s := tests.NewSuite(setupServer, []string{"hertzhttp", "hertzh2c"})
94+
// s.Debug = true
95+
return s
96+
}
97+
98+
func TestSuite(t *testing.T) {
99+
if os.Getenv("CI") != "" {
100+
t.Skip("Skipping testing in CI environment")
101+
}
102+
103+
// Run the tests.
104+
suite.Run(t, newSuite())
105+
}

client/orb/transport/hertzh2c/go.mod

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)