Skip to content

Commit 2bce1fc

Browse files
committed
add parseTag
1 parent 50a849c commit 2bce1fc

File tree

3 files changed

+154
-31
lines changed

3 files changed

+154
-31
lines changed

mse-go-demo/a-server/main.go

Lines changed: 63 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@ package main
33

44
import (
55
"context"
6+
"fmt"
7+
"io/ioutil"
68
"log"
79
"net/http"
8-
9-
"google.golang.org/grpc"
10+
"os"
11+
"regexp"
12+
"time"
1013

1114
b_api_pb "github.com/aliyun/alibabacloud-microservice-demo/mse-go-demo/a-server/proto/b_api"
15+
"google.golang.org/grpc"
1216
)
1317

1418
const (
@@ -17,21 +21,14 @@ const (
1721
address = "go-b-service:50051"
1822
)
1923

20-
var bClient b_api_pb.BServiceClient
21-
2224
func handler(w http.ResponseWriter, r *http.Request) {
25+
fmt.Printf("requesting: %v\n", r.URL)
2326
ctx := context.Background()
24-
bReply, err := bClient.BMethod(ctx, &b_api_pb.BRequest{})
25-
if err != nil {
26-
w.WriteHeader(500)
27-
return
28-
}
29-
content := "A->" + bReply.GetMessage()
30-
w.Write([]byte(content))
31-
}
27+
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
28+
defer cancel()
3229

33-
func main() {
34-
conn, err := grpc.Dial(
30+
conn, err := grpc.DialContext(
31+
ctx,
3532
address,
3633
grpc.WithInsecure(),
3734
grpc.WithBlock(),
@@ -40,8 +37,59 @@ func main() {
4037
log.Fatalf("did not connect: %v", err)
4138
}
4239
defer conn.Close()
43-
bClient = b_api_pb.NewBServiceClient(conn)
40+
bClient := b_api_pb.NewBServiceClient(conn)
4441

42+
bReply, err := bClient.BMethod(ctx, &b_api_pb.BRequest{})
43+
if err != nil {
44+
fmt.Printf("call b-service failed! %v\n", err)
45+
log.Printf("call b-service failed! %v", err)
46+
w.WriteHeader(500)
47+
fmt.Fprint(w, err.Error())
48+
return
49+
}
50+
content := generateMessage("A") + "->" + bReply.GetMessage()
51+
fmt.Fprintln(w, content)
52+
}
53+
54+
func main() {
55+
fmt.Println("starting")
4556
http.HandleFunc("/", handler)
57+
58+
fmt.Println("listening")
4659
log.Fatal(http.ListenAndServe(port, nil))
4760
}
61+
62+
func generateMessage(message string) string {
63+
tag := parseTag()
64+
if tag != "" {
65+
message += "-" + tag
66+
}
67+
hostname, err := os.Hostname()
68+
if err == nil {
69+
message += "[" + hostname + "]"
70+
}
71+
return message
72+
}
73+
74+
func parseTag() string {
75+
var re = regexp.MustCompile(`(?m)alicloud\.service\.tag="(?P<tag>.*)"`)
76+
bs, err := ioutil.ReadFile("/etc/podinfo/labels")
77+
if err != nil {
78+
return ""
79+
}
80+
content := string(bs)
81+
result := re.FindStringSubmatch(content)
82+
83+
groupNames := re.SubexpNames()
84+
index := 0
85+
for i, name := range groupNames {
86+
if name == "tag" {
87+
index = i
88+
break
89+
}
90+
}
91+
if len(result) <= index {
92+
return ""
93+
}
94+
return result[index]
95+
}

mse-go-demo/b-server/main.go

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ package main
33

44
import (
55
"context"
6+
"io/ioutil"
67
"log"
78
"net"
9+
"os"
10+
"regexp"
811

912
"google.golang.org/grpc"
1013
"google.golang.org/grpc/reflection"
@@ -21,23 +24,11 @@ const (
2124
// server is used to implement helloworld.GreeterServer.
2225
type server struct {
2326
b_api_pb.UnimplementedBServiceServer
24-
25-
cClient c_api_pb.CServiceClient
2627
}
2728

2829
func (s *server) BMethod(ctx context.Context, req *b_api_pb.BRequest) (*b_api_pb.BReply, error) {
29-
cReply, err := s.cClient.CMethod(ctx, &c_api_pb.CRequest{})
30-
if err != nil {
31-
return nil, err
32-
}
33-
reply := &b_api_pb.BReply{
34-
Message: "B->" + cReply.GetMessage(),
35-
}
36-
return reply, nil
37-
}
38-
39-
func main() {
40-
conn, err := grpc.Dial(
30+
conn, err := grpc.DialContext(
31+
ctx,
4132
address,
4233
grpc.WithInsecure(),
4334
grpc.WithBlock(),
@@ -48,16 +39,62 @@ func main() {
4839
defer conn.Close()
4940
cClient := c_api_pb.NewCServiceClient(conn)
5041

42+
cReply, err := cClient.CMethod(ctx, &c_api_pb.CRequest{})
43+
if err != nil {
44+
return nil, err
45+
}
46+
reply := &b_api_pb.BReply{
47+
Message: generateMessage("B") + "->" + cReply.GetMessage(),
48+
}
49+
return reply, nil
50+
}
51+
52+
func main() {
5153
lis, err := net.Listen("tcp", port)
5254
if err != nil {
5355
log.Fatalf("failed to listen: %v", err)
5456
}
5557
s := grpc.NewServer()
56-
b_api_pb.RegisterBServiceServer(s, &server{cClient: cClient})
58+
b_api_pb.RegisterBServiceServer(s, &server{})
5759
log.Printf("server listening at %v", lis.Addr())
5860
// Register reflection service on gRPC server.
5961
reflection.Register(s)
6062
if err := s.Serve(lis); err != nil {
6163
log.Fatalf("failed to serve: %v", err)
6264
}
6365
}
66+
67+
func generateMessage(message string) string {
68+
tag := parseTag()
69+
if tag != "" {
70+
message += "-" + tag
71+
}
72+
hostname, err := os.Hostname()
73+
if err == nil {
74+
message += "[" + hostname + "]"
75+
}
76+
return message
77+
}
78+
79+
func parseTag() string {
80+
var re = regexp.MustCompile(`(?m)alicloud\.service\.tag="(?P<tag>.*)"`)
81+
bs, err := ioutil.ReadFile("/etc/podinfo/labels")
82+
if err != nil {
83+
return ""
84+
}
85+
content := string(bs)
86+
result := re.FindStringSubmatch(content)
87+
88+
groupNames := re.SubexpNames()
89+
index := 0
90+
for i, name := range groupNames {
91+
if name == "tag" {
92+
index = i
93+
break
94+
}
95+
}
96+
if len(result) <= index {
97+
return ""
98+
}
99+
return result[index]
100+
}

mse-go-demo/c-server/main.go

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ package main
33

44
import (
55
"context"
6+
"io/ioutil"
67
"log"
78
"net"
9+
"os"
10+
"regexp"
811

912
"google.golang.org/grpc"
1013
"google.golang.org/grpc/reflection"
@@ -23,7 +26,7 @@ type server struct {
2326

2427
func (s *server) CMethod(context.Context, *pb.CRequest) (*pb.CReply, error) {
2528
reply := &pb.CReply{
26-
Message: "C",
29+
Message: generateMessage("C"),
2730
}
2831
return reply, nil
2932
}
@@ -42,3 +45,38 @@ func main() {
4245
log.Fatalf("failed to serve: %v", err)
4346
}
4447
}
48+
49+
func generateMessage(message string) string {
50+
tag := parseTag()
51+
if tag != "" {
52+
message += "-" + tag
53+
}
54+
hostname, err := os.Hostname()
55+
if err == nil {
56+
message += "[" + hostname + "]"
57+
}
58+
return message
59+
}
60+
61+
func parseTag() string {
62+
var re = regexp.MustCompile(`(?m)alicloud\.service\.tag="(?P<tag>.*)"`)
63+
bs, err := ioutil.ReadFile("/etc/podinfo/labels")
64+
if err != nil {
65+
return ""
66+
}
67+
content := string(bs)
68+
result := re.FindStringSubmatch(content)
69+
70+
groupNames := re.SubexpNames()
71+
index := 0
72+
for i, name := range groupNames {
73+
if name == "tag" {
74+
index = i
75+
break
76+
}
77+
}
78+
if len(result) <= index {
79+
return ""
80+
}
81+
return result[index]
82+
}

0 commit comments

Comments
 (0)