23. grpcゲートウェイ基本的なセットアップと操作方法を作成します。

まずmicro.NewServiceもHTTPなどの他のアクセス方法をサポートすることが判明grpcサービスを作成していますが、ゲートウェイサポートHTTP許可されたアクセスを作成する必要があるので、この方法は、grpc grpc.NewServiceへのアクセスをサポートしています

package main

import (
    "github.com/micro/go-micro"
    "github.com/micro/go-micro/registry"
    "github.com/micro/go-micro/registry/etcd"
    "github.com/micro/go-micro/service/grpc"
    "micro/Services"
    "micro/ServicesImpl"
)

func main() {
    //consulReg := consul.NewRegistry(registry.Addrs("localhost:8500"))
    etcdReg := etcd.NewRegistry(registry.Addrs("106.12.72.181:23791"))
    myservice := grpc.NewService( //原来是micro.NewService还支持http等其他访问方式,但是grpc这种方法只支持grpc访问,所以需要创建网关让其支持http访问
        micro.Name("api.xiahualou.com.test"),
        micro.Address(":8001"),
        micro.Registry(etcdReg),
        //micro.Registry(consulReg),
    )
    Services.RegisterTestServiceHandler(myservice.Server(), new(ServicesImpl.TestService))
    myservice.Run()
}

ここでインストールするためのツールがいくつかあります

画像-20200102203807649

grpcゲートウェイファイルから生成され、我々は避けるの競合にゲートウェイファイルを置くために新しいフォルダserviceGWを作成するので、あなたは、以下のパッケージを置くことができないので、行く、マイクロ結果のファイルは、名前と一緒にいくつかの機能を持っているので、

cd Services/protos
protoc --micro_out=../ --go_out=../ test.proto
protoc-go-inject-tag -input=../test.pb.go

#生成网关文件
protoc --go_out=plugins=grpc:../../ServiceGW test.proto
protoc --grpc-gateway_out=logtostderr=true:../../ServiceGW test.proto
cd .. && cd ..

私たちは、ファイルをPROTOので、サービスであることが判明しServiceGWへのゲートウェイを生成した文書のパッケージは、サービスで定義されています

スタートgrpcサービス

package main

import (
    "github.com/micro/go-micro"
    "github.com/micro/go-micro/registry"
    "github.com/micro/go-micro/registry/etcd"
    "github.com/micro/go-micro/service/grpc"
    "micro/Services"
    "micro/ServicesImpl"
)

func main() {
    //consulReg := consul.NewRegistry(registry.Addrs("localhost:8500"))
    etcdReg := etcd.NewRegistry(registry.Addrs("106.12.72.181:23791"))
    myservice := grpc.NewService(
        micro.Name("api.xiahualou.com.test"),
        micro.Address(":8001"),
        micro.Registry(etcdReg),
        //micro.Registry(consulReg),
    )
    Services.RegisterTestServiceHandler(myservice.Server(), new(ServicesImpl.TestService))
    myservice.Run()
}

スタートゲートウェイサービス

package main

import (
    "context"
    "github.com/grpc-ecosystem/grpc-gateway/runtime"
    "google.golang.org/grpc"
    "log"
    "micro/ServiceGW"
    "net/http"
)

func main() {
    ctx := context.Background()
    ctx, cancel := context.WithCancel(ctx)
    defer cancel()
    gRpcEndPoint := "localhost:8001"
    mux := runtime.NewServeMux()
    opts := []grpc.DialOption{grpc.WithInsecure()} //不使用证书校验
    err := ServiceGW.RegisterTestServiceHandlerFromEndpoint(ctx, mux, gRpcEndPoint, opts) //gRpcEndPoint在这里的作用是当有请求来到9000端口会转发给8001端口
    if err != nil {
        log.Fatal(err)
    }
    http.ListenAndServe(":9000", mux)//通过postman访问9000端口服务会转发给8001端口的rpc服务
}

httpリクエストのアクセスを使用して郵送で結果を得ることができ、URLが私たちのプロト定義ファイルで、ここで要求します





おすすめ

転載: www.cnblogs.com/hualou/p/12142153.html