-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
77 lines (69 loc) · 1.81 KB
/
main.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
71
72
73
74
75
76
77
package main
import (
"context"
"log"
"net"
"net/http"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"github.com/yu-yk/median-svc/median"
"github.com/yu-yk/median-svc/proto"
"go.uber.org/fx"
"go.uber.org/zap"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
)
func newGRPCService(logger *zap.Logger) (*grpc.Server, *median.Server) {
grpcServer := grpc.NewServer()
medianServer := median.NewServer(logger)
return grpcServer, medianServer
}
func registerGRPCService(lc fx.Lifecycle, grpcServer *grpc.Server, medianServer *median.Server) {
proto.RegisterMedianServer(grpcServer, medianServer)
reflection.Register(grpcServer)
lc.Append(fx.Hook{
OnStart: func(ctx context.Context) error {
listener, err := net.Listen("tcp", ":3000")
if err != nil {
return err
}
log.Println("serving grpc at tcp:3000")
go grpcServer.Serve(listener)
return nil
},
OnStop: func(ctx context.Context) error {
grpcServer.GracefulStop()
return nil
},
})
}
func registerHTTPGateway(lc fx.Lifecycle, mediaServer *median.Server) *http.Server {
mux := runtime.NewServeMux()
server := &http.Server{Addr: ":3001", Handler: mux}
lc.Append(fx.Hook{
OnStart: func(ctx context.Context) error {
err := proto.RegisterMedianHandlerServer(ctx, mux, mediaServer)
// opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())}
// err := proto.RegisterMedianHandlerFromEndpoint(ctx, mux, ":3000", opts)
if err != nil {
return err
}
log.Println("serving http at :3001")
go server.ListenAndServe()
return nil
},
OnStop: func(ctx context.Context) error {
return server.Close()
},
})
return server
}
func main() {
fx.New(
fx.Provide(
newGRPCService,
zap.NewExample,
),
fx.Invoke(registerGRPCService),
fx.Invoke(registerHTTPGateway),
).Run()
}