Почему клиент всегда получал «транспорт: получил неожиданный тип контента» от localhost GO написал сервис GRPC - PullRequest
0 голосов
/ 18 ноября 2018

Я только что клонировал пример кода из micro / go-grpc и попытался собрать сервер grpc в localhost.

proto file 

syntax = "proto3";

package go.micro.srv.greeter;

service Say {
    rpc Hello(Request) returns (Response) {}
}

message Request {
    string name = 1;
}

message Response {
    string msg = 1;
}

Сервер / main.go

package main

import (
    "context"
    "log"

    "github.com/micro/go-micro"
    "github.com/micro/go-grpc"
    hello "github.com/micro/go-grpc/examples/greeter/server/proto/hello"
)

type Say struct{}

func (s *Say) Hello(ctx context.Context, req *hello.Request, rsp 
*hello.Response) error {
    log.Print("Received Say.Hello request")
    rsp.Msg = "Hello " + req.Name
    return nil
}

func main() {
    service := grpc.NewService(
        micro.Name("go.micro.srv.greeter"),
    )

// optionally setup command line usage
service.Init()

// Register Handlers
hello.RegisterSayHandler(service.Server(), new(Say))

// Run server
if err := service.Run(); err != nil {
    log.Fatal(err)
    }
}

клиент / main.go

package main

import (
    "context"
    "fmt"

    "github.com/micro/cli"
    "github.com/micro/go-grpc"
    hello "github.com/micro/go-grpc/examples/greeter/server/proto/hello"
    "github.com/micro/go-micro"
)

var (
    // service to call
    serviceName string
)

func main() {
    service := grpc.NewService()

    service.Init(
        micro.Flags(cli.StringFlag{
            Name:        "service_name",
            Value:       "go.micro.srv.greeter",
            Destination: &serviceName,
        }),
    )

    cl := hello.NewSayService(serviceName, service.Client())

    rsp, err := cl.Hello(context.TODO(), &hello.Request{
        Name: "John",
    })
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(rsp.Msg)
}

Моя ОС MacOsX, версия go 1.11.1 .

Когда я запускаю пример кода на стороне сервера, все выглядит нормально:

$ go run ./main.go --server_address:localhost:9999
2018/11/18 20:08:05 Listening on 127.0.0.1:9999
2018/11/18 20:08:05 Broker Listening on [::]:62739
2018/11/18 20:08:05 Registering node: go.micro.srv.greeter-9b2818b0-eb2a-11e8-bfef-720008acb800

Но если я запускаю пример кода на стороне клиента, всегда получаю:

{"id":"","code":0,"detail":"transport: received the unexpected content-type "text/plain"","status":""}

Я пытался удалить --server_address и все так же. Я пытался добавить реестр mdns, тоже не работает. Я пытался использовать $ micro health go.micro.srv.greeter, он вернул тот же результат.

Интересно, что не так с моей настройкой?

...