Hade フレームワークは、データ伝送形式として protobuf を使用し、伝送プロトコルとして http2 を使用する、本質的に rpc リモート呼び出しである grpc のサポートを追加します。Hade フレームワークは、grpc の Go 言語実装ライブラリ google.golang.org/grpc に依存しており、次のコマンド ライン ツールを提供します。
hade grpc start
grpcサービスを開始するhade grpc stop
grpcサービスを停止するhade grpc restart
grpcサービスを再起動しますhade grpc state
grpc サービスのステータスを表示する
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 start
grpc サービスを開始します。
➜ 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 stop
grpc サービスを停止できます。
➜ 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