Skip to content

Commit cb6d229

Browse files
committed
feat(micro): testing cmux with greeter project
1 parent c86a5dc commit cb6d229

File tree

20 files changed

+402
-519
lines changed

20 files changed

+402
-519
lines changed

cmd/account/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ func main() {
3333
username := flag.String("username", "sumo", "username of user to be create")
3434
email := flag.String("email", "[email protected]", "email of user to be create")
3535
limit := flag.Uint64("limit", 10, "Limit number of results")
36+
flag.Parse()
3637

3738
log.Debug().Str("username", *username).Str("email", *email).Uint64("limit", *limit).Msg("Flags Using:")
3839

config/config.prod.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ features:
22
tls:
33
cert_file: /config/certs/upstream-cert.pem
44
key_file: /config/certs/upstream-key.pem
5+
servername: "*"

config/config.test.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ email:
55

66
services:
77
account:
8-
endpoint: mkit.service.account:8080
8+
endpoint: tcp://account:8080
99
version: v0.1.0
1010
deadline: 8888

config/config.yaml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ database:
44
port: 9999
55
username: sumo
66
password: demo
7-
database: "file:foobar?mode=memory&cache=shared"
7+
# database: "file:foobar?mode=memory&cache=shared"
8+
database: "file::memory:?cache=shared"
89
max_open_conns: 1
910
max_idle_conns: 1
1011
conn_max_lifetime: 1h
@@ -18,16 +19,17 @@ email:
1819

1920
services:
2021
account:
21-
endpoint: mkit.service.account:8080
22+
endpoint: tcp://account:8080
2223
version: v0.1.0
2324
greeter:
24-
endpoint: mkit.service.greeter:8080
25+
endpoint: tcp://greeter:8081
26+
# endpoint: unix:///tmp/greeter.sock
2527
version: v0.1.0
2628
emailer:
27-
endpoint: mkit.service.emailer:8080
29+
endpoint: tcp://emailer:8082
2830
version: v0.1.0
2931
recorder:
30-
endpoint: mkit.service.recorder:8080
32+
endpoint: tcp://recorder:8083
3133
version: v0.1.0
3234

3335
features:
@@ -43,7 +45,7 @@ features:
4345
cert_file: /config/certs/upstream-localhost-cert.pem
4446
key_file: /config/certs/upstream-localhost-key.pem
4547
ca_file: /config/certs/upstream-ca-cert.pem
46-
servername: "*"
48+
servername: "localhost"
4749
enabled: false
4850
validator:
4951
enabled: true

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ require (
2222
github.com/rs/zerolog v1.19.0
2323
github.com/sarulabs/di/v2 v2.4.0
2424
github.com/satori/go.uuid v1.2.0
25+
github.com/soheilhy/cmux v0.1.4
2526
github.com/stretchr/testify v1.6.1
2627
github.com/thoas/go-funk v0.6.0
2728
github.com/xmlking/configor v0.0.0-20200609225939-ed6133420e9d
28-
google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482
29+
google.golang.org/genproto v0.0.0-20200611194920-44ba362f84c1
2930
google.golang.org/grpc v1.27.0
3031
)

go.sum

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98
523523
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
524524
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
525525
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
526-
google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
526+
google.golang.org/genproto v0.0.0-20200611194920-44ba362f84c1/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
527527
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
528528
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
529529
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=

service/account/README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ Run the service
3131

3232
```bash
3333
make run-account
34-
make run-account ARGS="--server_address=:8080"
3534
# or
3635
go run service/account/main.go service/account/plugin.go
3736
```
@@ -41,3 +40,13 @@ Build a docker image
4140
```bash
4241
make docker TARGET=account TYPE=service VERSION=v0.1.1
4342
```
43+
44+
Test the service
45+
46+
```bash
47+
micro call mkit.service.account UserService.Create \
48+
'{"username": "sumo", "firstName": "sumo", "lastName": "demo", "email": "[email protected]"}'
49+
micro call mkit.service.account UserService.Create \
50+
'{"username": "sumo1", "firstName": "sumo1", "lastName": "demo1", "email": "[email protected]"}'
51+
micro call mkit.service.account UserService.List '{}'
52+
```

service/account/main.go

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package main
22

33
import (
44
"github.com/micro/go-micro/v2"
5+
sgrpc "github.com/micro/go-micro/v2/server/grpc"
56
"github.com/rs/zerolog/log"
67

7-
// "github.com/micro/go-micro/v2/service/grpc"
88
"github.com/xmlking/micro-starter-kit/service/account/handler"
99
profilePB "github.com/xmlking/micro-starter-kit/service/account/proto/profile"
1010
userPB "github.com/xmlking/micro-starter-kit/service/account/proto/user"
@@ -19,68 +19,66 @@ import (
1919
validatorWrapper "github.com/xmlking/micro-starter-kit/shared/wrapper/validator"
2020
)
2121

22-
const (
23-
serviceName = constants.ACCOUNT_SERVICE
24-
)
22+
func main() {
23+
serviceName := constants.ACCOUNT_SERVICE
24+
cfg := config.GetConfig()
2525

26-
var (
27-
cfg = config.GetConfig()
28-
)
26+
lis, err := config.GetListener(cfg.Services.Account.Endpoint)
27+
if err != nil {
28+
log.Fatal().Msgf("failed to create listener: %v", err)
29+
}
30+
println(lis.Addr())
2931

30-
func main() {
3132
// New Service
3233
service := micro.NewService(
34+
micro.Server(sgrpc.NewServer(sgrpc.Listener(lis))), // KEEP-IT-FIRST
3335
micro.Name(serviceName),
3436
micro.Version(config.Version),
3537
)
3638

37-
// Initialize service
38-
service.Init(
39-
micro.BeforeStart(func() (err error) {
40-
return
41-
}),
42-
micro.BeforeStop(func() (err error) {
43-
return
44-
}),
45-
)
46-
4739
// Initialize Features
4840
var options []micro.Option
41+
4942
if cfg.Features.Tls.Enabled {
5043
if tlsConf, err := config.CreateServerCerts(); err != nil {
5144
log.Error().Err(err).Msg("unable to load certs")
5245
} else {
5346
log.Info().Msg("TLS Enabled")
54-
options = append(options,
55-
tls.WithTLS(tlsConf),
56-
)
47+
options = append(options, tls.WithTLS(tlsConf))
5748
}
5849
}
50+
5951
// Wrappers are invoked in the order as they added
6052
if cfg.Features.Reqlogs.Enabled {
6153
options = append(options,
6254
micro.WrapHandler(logWrapper.NewHandlerWrapper()),
6355
micro.WrapClient(logWrapper.NewClientWrapper()),
6456
)
6557
}
66-
if cfg.Features.Validator.Enabled {
67-
options = append(options,
68-
micro.WrapHandler(validatorWrapper.NewHandlerWrapper()),
69-
)
70-
}
7158
if cfg.Features.Translogs.Enabled {
7259
topic := cfg.Features.Translogs.Topic
7360
publisher := micro.NewEvent(topic, service.Client())
74-
options = append(options,
75-
micro.WrapHandler(transWrapper.NewHandlerWrapper(publisher)),
76-
)
61+
options = append(options, micro.WrapHandler(transWrapper.NewHandlerWrapper(publisher)))
62+
}
63+
if cfg.Features.Validator.Enabled {
64+
options = append(options, micro.WrapHandler(validatorWrapper.NewHandlerWrapper()))
7765
}
7866

79-
// Initialize Features
80-
service.Init(
81-
options...,
67+
// Adding some optional lifecycle actions
68+
options = append(options,
69+
micro.BeforeStart(func() (err error) {
70+
log.Debug().Msg("called BeforeStart")
71+
return
72+
}),
73+
micro.BeforeStop(func() (err error) {
74+
log.Debug().Msg("called BeforeStop")
75+
return
76+
}),
8277
)
8378

79+
// Initialize service
80+
service.Init(options...)
81+
8482
// Initialize DI Container
8583
ctn, err := registry.NewContainer(cfg)
8684
defer ctn.Clean()
@@ -104,6 +102,7 @@ func main() {
104102
profilePB.RegisterProfileServiceHandler(service.Server(), profileHandler)
105103

106104
println(config.GetBuildInfo())
105+
107106
// Run service
108107
if err := service.Run(); err != nil {
109108
log.Fatal().Err(err).Msg("")

service/emailer/main.go

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"github.com/micro/go-micro/v2"
5+
sgrpc "github.com/micro/go-micro/v2/server/grpc"
56

67
"github.com/rs/zerolog/log"
78

@@ -15,43 +16,34 @@ import (
1516
// "github.com/xmlking/micro-starter-kit/service/emailer/subscriber"
1617
)
1718

18-
const (
19-
serviceName = constants.EMAILER_SERVICE
20-
)
19+
func main() {
20+
serviceName := constants.EMAILER_SERVICE
21+
cfg := config.GetConfig()
2122

22-
var (
23-
cfg = config.GetConfig()
24-
)
23+
lis, err := config.GetListener(cfg.Services.Emailer.Endpoint)
24+
if err != nil {
25+
log.Fatal().Msgf("failed to create listener: %v", err)
26+
}
2527

26-
func main() {
2728
// New Service
2829
service := micro.NewService(
30+
micro.Server(sgrpc.NewServer(sgrpc.Listener(lis))), // KEEP-IT-FIRST
2931
micro.Name(serviceName),
3032
micro.Version(config.Version),
3133
)
3234

33-
// Initialize service
34-
service.Init(
35-
micro.BeforeStart(func() (err error) {
36-
return
37-
}),
38-
micro.BeforeStop(func() (err error) {
39-
return
40-
}),
41-
)
42-
4335
// Initialize Features
4436
var options []micro.Option
37+
4538
if cfg.Features.Tls.Enabled {
4639
if tlsConf, err := config.CreateServerCerts(); err != nil {
4740
log.Error().Err(err).Msg("unable to load certs")
4841
} else {
4942
log.Info().Msg("TLS Enabled")
50-
options = append(options,
51-
tls.WithTLS(tlsConf),
52-
)
43+
options = append(options, tls.WithTLS(tlsConf))
5344
}
5445
}
46+
5547
// Wrappers are invoked in the order as they added
5648
if cfg.Features.Reqlogs.Enabled {
5749
options = append(options, micro.WrapSubscriber(logWrapper.NewSubscriberWrapper()))
@@ -62,11 +54,21 @@ func main() {
6254
options = append(options, micro.WrapSubscriber(transWrapper.NewSubscriberWrapper(publisher)))
6355
}
6456

65-
// Initialize Features
66-
service.Init(
67-
options...,
57+
// Adding some optional lifecycle actions
58+
options = append(options,
59+
micro.BeforeStart(func() (err error) {
60+
log.Debug().Msg("called BeforeStart")
61+
return
62+
}),
63+
micro.BeforeStop(func() (err error) {
64+
log.Debug().Msg("called BeforeStop")
65+
return
66+
}),
6867
)
6968

69+
// Initialize service
70+
service.Init(options...)
71+
7072
// Initialize DI Container
7173
ctn, err := registry.NewContainer(cfg)
7274
defer ctn.Clean()
@@ -84,11 +86,10 @@ func main() {
8486
// register subscriber with queue, each message is delivered to a unique subscriber
8587
// micro.RegisterSubscriber("mkit.service.emailer-2", service.Server(), subscriber.Handler, server.SubscriberQueue("queue.pubsub"))
8688

87-
// PrintBuildInfo
8889
println(config.GetBuildInfo())
8990

9091
// Run service
9192
if err := service.Run(); err != nil {
92-
log.Fatal().Err(err).Msg("")
93+
log.Fatal().Err(err).Send()
9394
}
9495
}

service/greeter/README.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,12 @@ This is the Greeter service
1010

1111
## Usage
1212

13-
A Makefile is included for convenience
14-
1513
Build the binary
1614

1715
```bash
1816
make build TARGET=greeter TYPE=service
1917
# then run with custom env
20-
MICRO_SERVER_ADDRESS=0.0.0.0:9999 CONFIGOR_ENV_PREFIX=APP APP_FEATURES_TLS_ENABLED=true ./build/greeter-service
18+
CONFIGOR_ENV_PREFIX=APP APP_FEATURES_TLS_ENABLED=true ./build/greeter-service
2119
```
2220

2321
Run the service
@@ -34,18 +32,18 @@ Build a docker image
3432
make docker TARGET=greeter TYPE=service VERSION=v0.1.1
3533
```
3634

37-
### Test
35+
Test the service
3836

3937
```bash
40-
# start the server on fixed port
41-
make run-greeter ARGS="--server_address=:8080 --broker_address=:10001"
38+
# start greeter service first
39+
make run-greeter
4240

4341
# test with grpc cli
4442
grpcurl -plaintext -proto service/greeter/proto/greeter/greeter.proto list
4543
grpcurl -plaintext -proto service/greeter/proto/greeter/greeter.proto describe
46-
grpcurl -plaintext -proto service/greeter/proto/greeter/greeter.proto -d '{"name": "sumo"}' localhost:8080 mkit.service.greeter.Greeter/Hello
44+
grpcurl -plaintext -proto service/greeter/proto/greeter/greeter.proto -d '{"name": "sumo"}' localhost:8081 mkit.service.greeter.v1.GreeterService/Hello
4745
# testing via micro-cli
48-
micro --client=grpc call --metadata trans-id=1234 mkit.service.greeter Greeter.Hello '{"name": "John"}'
46+
micro call mkit.service.greeter GreeterService.Hello '{"name": "John"}'
4947

5048
# start REST gateway
5149
micro api --enable_rpc=true
@@ -55,5 +53,5 @@ curl --request POST \
5553
--url http://localhost:8080/rpc \
5654
--header 'accept: application/json' \
5755
--header 'content-type: application/json' \
58-
--data '{"service": "mkit.service.greeter", "method": "Greeter.Hello","request": {"name": "sumo"}}'
56+
--data '{"service": "mkit.service.greeter", "method": "GreeterService.Hello","request": {"name": "sumo"}}'
5957
```

0 commit comments

Comments
 (0)