1
0
mirror of https://github.com/go-micro/go-micro.git synced 2024-12-24 10:07:04 +02:00
go-micro/examples/roundrobin/api.go
2020-12-26 15:21:29 +00:00

66 lines
1.3 KiB
Go

package main
import (
"encoding/json"
"log"
"strings"
hello "github.com/micro/go-micro/examples/greeter/srv/proto/hello"
"github.com/micro/go-micro/v2"
"github.com/micro/go-micro/v2/errors"
roundrobin "github.com/micro/go-plugins/wrapper/select/roundrobin/v2"
api "github.com/micro/micro/v2/api/proto"
"context"
)
type Say struct {
Client hello.SayService
}
func (s *Say) Hello(ctx context.Context, req *api.Request, rsp *api.Response) error {
log.Print("Received Say.Hello API request")
name, ok := req.Get["name"]
if !ok || len(name.Values) == 0 {
return errors.BadRequest("go.micro.api.greeter", "Name cannot be blank")
}
response, err := s.Client.Hello(ctx, &hello.Request{
Name: strings.Join(name.Values, " "),
})
if err != nil {
return err
}
rsp.StatusCode = 200
b, _ := json.Marshal(map[string]string{
"message": response.Msg,
})
rsp.Body = string(b)
return nil
}
func main() {
wrapper := roundrobin.NewClientWrapper()
service := micro.NewService(
micro.Name("go.micro.api.greeter"),
micro.WrapClient(wrapper),
)
// parse command line flags
service.Init()
service.Server().Handle(
service.Server().NewHandler(
&Say{Client: hello.NewSayService("go.micro.srv.greeter", service.Client())},
),
)
if err := service.Run(); err != nil {
log.Fatal(err)
}
}