Hade が grpc のサポートを追加しました

Hade フレームワークは、データ伝送形式として protobuf を使用し、伝送プロトコルとして http2 を使用する、本質的に rpc リモート呼び出しである grpc のサポートを追加します。Hade フレームワークは、grpc の Go 言語実装ライブラリ google.golang.org/grpc に依存しており、次のコマンド ライン ツールを提供します。

  • hade grpc startgrpcサービスを開始する

  • hade grpc stopgrpcサービスを停止する

  • hade grpc restartgrpcサービスを再起動します

  • hade grpc stategrpc サービスのステータスを表示する

hade を使用して grpc サービスを作成する方法

1.プロトファイルの作成

プロジェクトの app/grpc/proto/ ディレクトリに、proto/helloworld.proto次の内容の proto ファイルを作成します (例: )。

syntax = "proto3";

option go_package = "examples/helloworld";
option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";

package helloworld;

// The greeting service definition.
service Greeter {
    // Sends a greeting
    rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
    string name = 1;
}

// The response message containing the greetings
message HelloReply {
    string message = 1;
}

2. go ファイルを生成する

grpc 公式 Web サイトが提供する proto ツールを使用して、対応する go ファイルを生成します。

インターネット上には、プロトツールの使用に関する記事がたくさんあります。Mac 側のインストール コマンドの簡単なリストを次に示します。

brew install protobuf

go install google.golang.org/protobuf/cmd/protoc-gen-go

go install google.golang.org/grpc/cmd/protoc-gen-go-grpc

go ファイルを生成するコマンドは次のとおりです。

protoc --go_out=./app/grpc/proto/ --go-grpc_out=./app/grpc/proto/ ./app/grpc/proto/helloworld.proto

app/grpc/proto/ディレクトリにファイルが生成されていることがわかります。

examples/helloworld/helloworld.pb.go
examples/helloworld/helloworld_grpc.pb.go

3. サービスを作成する

pb: helloworld.GreeterServer で定義されたこのサービスを実装したいと考えています。

app/grpc/service/ ディレクトリにapp/grpc/service/helloworld/service.go次の内容のファイルを作成します。

package helloworld

import (
    "context"
    "log"

    pb "github.com/gohade/hade/app/grpc/proto/examples/helloworld"
)

// Server is used to implement helloworld.GreeterServer.
type Server struct {
    pb.UnimplementedGreeterServer
}

// SayHello implements helloworld.GreeterServer
func (s *Server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
    log.Printf("Received: %v", in.GetName())
    return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil
}

4. 登録サービス

app/grpc/kernel.go ファイルにサービスを登録します。

package grpc

import (
    helloworldgen "github.com/gohade/hade/app/grpc/proto/examples/helloworld"
    "github.com/gohade/hade/app/grpc/service/helloworld"
    "github.com/gohade/hade/framework"
    pkggrpc "google.golang.org/grpc"
    "google.golang.org/grpc/reflection"
)

// NewGrpcEngine 创建了一个绑定了路由的Web引擎
func NewGrpcEngine(container framework.Container) (*pkggrpc.Server, error) {

    s := pkggrpc.NewServer()

    // 这里进行服务注册
    helloworldgen.RegisterGreeterServer(s, &helloworld.Server{})
    reflection.Register(s)

    return s, nil
}

ここでは、サービスを登録するだけでなく、リフレクション サービスも登録しました。これにより、grpcurl ツールを使用して grpc サービスをテストできるようになります。

5. サービスを開始する

まず独自のプロジェクトをコンパイルしますhade build self

プロジェクトのルート ディレクトリでコマンドを実行して、hade grpc startgrpc サービスを開始します。

➜  hade git:(dev/feature-grpc) ✗ ./hade grpc start
成功启动进程: hade grpc
进程pid: 96290
监听地址: grpc://localhost:8888
基础路径: /Users/jianfengye/Documents/workspace/gohade/hade/
日志路径: /Users/jianfengye/Documents/workspace/gohade/hade/storage/log
运行路径: /Users/jianfengye/Documents/workspace/gohade/hade/storage/runtime
配置路径: /Users/jianfengye/Documents/workspace/gohade/hade/config

hade grpc start -dコマンドを使用してサービスを開始し、サービスがバックグラウンドで実行されるようにすることもできます。

デフォルトのポートは 8888 です。コマンド ライン パラメータを使用して--addressポートを指定できます。

hade git:(dev/feature-grpc) ✗ ./hade grpc start --address=:8777 -d
成功启动进程: hade grpc
进程pid: 97685
监听地址: grpc://localhost:8777
基础路径: /Users/jianfengye/Documents/workspace/gohade/hade/
日志路径: /Users/jianfengye/Documents/workspace/gohade/hade/storage/log
运行路径: /Users/jianfengye/Documents/workspace/gohade/hade/storage/runtime
配置路径: /Users/jianfengye/Documents/workspace/gohade/hade/config

6. テストサービス

ここで、ポート 8777 でデーモン モードで grpc プロセスを開始するとします。

grpcurl ツールを使用して grpc サービスをテストします。

grpurl は Go 言語のオープンソース コミュニティによって開発されたツールであり、手動でインストールする必要があります。

$ go get github.com/fullstorydev/grpcurl
$ go install github.com/fullstorydev/grpcurl/cmd/grpcurl
➜  hade git:(dev/feature-grpc) ✗ grpcurl -plaintext localhost:8777 list
grpc.reflection.v1.ServerReflection
grpc.reflection.v1alpha.ServerReflection
helloworld.Greeter

ご覧のとおり、サービスは正常に登録されました。

サービスをテストしてみましょう:

➜  hade git:(dev/feature-grpc) ✗ grpcurl -plaintext -d '{"name": "hade"}' localhost:8777 helloworld.Greeter/SayHello
{
  "message": "Hello hade"
}

7. grpc サービスのステータスを表示する

hade grpc stateコマンドを通じて grpc サービスのステータスを確認できます。

➜  hade git:(dev/feature-grpc) ✗ ./hade grpc state
grpc服务已经启动, pid: 97685

8. grpc サービスを停止します

コマンドを使用してhade grpc stopgrpc サービスを停止できます。

➜  hade git:(dev/feature-grpc) ✗ ./hade grpc stop
停止进程: 97685

9. grpc サービスを再起動します。

hade grpc restartコマンドを使用して grpc サービスを再起動できます。

➜  hade git:(dev/feature-grpc) ✗ ./hade grpc restart
结束进程成功:1590
成功启动进程: hade grpc
进程pid: 1622
监听地址: grpc://localhost:8888
基础路径: /Users/jianfengye/Documents/workspace/gohade/hade/
日志路径: /Users/jianfengye/Documents/workspace/gohade/hade/storage/log
运行路径: /Users/jianfengye/Documents/workspace/gohade/hade/storage/runtime
配置路径: /Users/jianfengye/Documents/workspace/gohade/hade/config

http://hade.funaio.cn/guide/grpc.html

おすすめ

転載: blog.csdn.net/qq_42015552/article/details/132013908