Grpc
[[toc]]
介绍
Grpc 模块可以使用 facades.Grpc 进行操作。
控制器
控制器文件可以定义在 /app/grpc/controllers 目录中。
// app/grpc/controllerspackage controllersimport ("context""net/http""github.com/goravel/grpc/protos")type UserController struct {}func NewUserController() *UserController {return &UserController{}}func (r *UserController) Show(ctx context.Context, req *protos.UserRequest) (protoBook *protos.UserResponse, err error) {return &protos.UserResponse{Code: http.StatusOK,}, nil}
定义路由
所有路由文件可以定义在 /routes 目录中,例如 /routes/grpc.go。然后注册到 app/providers/grpc_service_provider.go 文件中,以实现路由的绑定。
// routes/grpc.gopackage routesimport ("github.com/goravel/grpc/protos""github.com/goravel/framework/facades""goravel/app/grpc/controllers")func Grpc() {protos.RegisterUserServer(facades.Grpc.Server(), controllers.NewUserController())}
注册路由
路由定义好后,在 app/providers/grpc_service_provider.go 文件中注册路由。
// app/providers/grpc_service_provider.gopackage providersimport ("goravel/routes")type GrpcServiceProvider struct {}func (router *GrpcServiceProvider) Register() {}func (router *GrpcServiceProvider) Boot() {routes.Grpc()}
启动 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.gopackage providersimport ("github.com/goravel/framework/facades"grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware""google.golang.org/grpc""goravel/routes")type GrpcServiceProvider struct {}func (router *GrpcServiceProvider) Register() {}func (router *GrpcServiceProvider) Boot() {facades.Grpc.SetServer(grpc.NewServer(grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(// Add middleware),)))routes.Grpc()}
