1
0
mirror of https://github.com/go-micro/go-micro.git synced 2024-12-18 08:26:38 +02:00
go-micro/examples/roundrobin/api.go
2021-01-20 21:28:48 +00:00

66 lines
1.3 KiB
Go

package main
import (
"encoding/json"
"log"
"strings"
hello "github.com/asim/go-micro/examples/v3/greeter/srv/proto/hello"
"github.com/asim/go-micro/v3"
"github.com/asim/go-micro/v3/errors"
roundrobin "github.com/asim/go-micro/plugins/wrapper/select/roundrobin/v3"
api "github.com/asim/go-micro/v3/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)
}
}