Grpc
[[toc]]
介绍
Grpc 模块可以使用 facades.Grpc 进行操作。
路由文件
所有路由文件可以定义在 /routes 目录中,例如 /routes/grpc.go。然后注册到 app/providers/grpc_service_provider.go 文件中,以实现路由的绑定。
// routes/grpc.gofunc Grpc() {protos.RegisterUserServer(facades.Grpc.Server(), &controllers.UserController{})}// app/providers/grpc_service_provider.gofunc (router *GrpcServiceProvider) Boot() {routes.Grpc()}
控制器
控制器文件可以定义在 /app/grpc/controllers 目录中。
// /app/grpc/controllers/user_controller.gopackage controllersimport ("context""net/http""goravel/protos")type UserController struct {}func (r *UserController) GetUser(ctx context.Context, req *protos.UserRequest) (protoUser *protos.UserResponse, err error) {return &protos.UserResponse{Code: http.StatusOK,Data: &protos.User{Id: user.Id,},}, nil}
启动 Grpc 服务器
在 main.go 中启动 Grpc
go func() {if err := facades.Grpc.Run(facades.Config.GetString("grpc.host")); err != nil {facades.Log.Errorf("Grpc run error: %v", err)}}()
扩展
facades.Grpc 提供扩展方法,可以对 Server 进行扩展,例如中间件的设置:
| 名称 | 描述 |
|---|---|
Server() *grpc.Server |
获取 Server 实例 |
SetServer(server *grpc.Server) |
设置 Server 实例 |
// 设置链路跟踪中间件// app/providers/grpc_service_provider.gofunc (router *GrpcServiceProvider) Boot() {tracer, _ := helpers.NewJaegerTracer()facades.Grpc.SetServer(grpc.NewServer(grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(middleware.OpentracingServer(tracer),),)))routes.Grpc()}
