mse-go-demo/grpc/a-server/main.go (82 lines of code) (raw):

// Package main implements a server for Greeter service. package main import ( "context" "fmt" "io/ioutil" "log" "net/http" "os" "regexp" "time" b_api_pb "github.com/aliyun/alibabacloud-microservice-demo/mse-go-demo/grpc/a-server/proto/b_api" "google.golang.org/grpc" ) const ( port = ":8080" address = "go-b-service:50052" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Printf("requesting: %v\n", r.URL) ctx := context.Background() ctx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() conn, err := grpc.DialContext( ctx, address, grpc.WithInsecure(), grpc.WithBlock(), ) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() bClient := b_api_pb.NewBServiceClient(conn) bReply, err := bClient.BMethod(ctx, &b_api_pb.BRequest{}) if err != nil { fmt.Printf("call b-service failed! %v\n", err) log.Printf("call b-service failed! %v", err) w.WriteHeader(500) fmt.Fprint(w, err.Error()) return } content := generateMessage("A") + "->" + bReply.GetMessage() fmt.Fprintln(w, content) } func main() { fmt.Println("starting") http.HandleFunc("/", handler) fmt.Println("listening") log.Fatal(http.ListenAndServe(port, nil)) } func generateMessage(message string) string { tag := parseTag() if tag != "" { message += "-" + tag } hostname, err := os.Hostname() if err == nil { message += "[" + hostname + "]" } return message } func parseTag() string { var re = regexp.MustCompile(`(?m)alicloud\.service\.tag="(?P<tag>.*)"`) bs, err := ioutil.ReadFile("/etc/podinfo/labels") if err != nil { return "" } content := string(bs) result := re.FindStringSubmatch(content) groupNames := re.SubexpNames() index := 0 for i, name := range groupNames { if name == "tag" { index = i break } } if len(result) <= index { return "" } return result[index] }