@@ -3,12 +3,16 @@ package main
33
44import (
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
1418const (
@@ -17,21 +21,14 @@ const (
1721 address = "go-b-service:50051"
1822)
1923
20- var bClient b_api_pb.BServiceClient
21-
2224func 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+ }
0 commit comments