代码拉取完成,页面将自动刷新
package main
import (
"context"
"errors"
"fmt"
"log"
"net"
"time"
reflectPb "gitee.com/wu-jin-feng/fgin/demos/fconsul_test/server/pb"
"google.golang.org/grpc"
)
type DemoServiceServer struct {
reflectPb.UnimplementedDemoServiceServer
}
func (s *DemoServiceServer) GetScheme(ctx context.Context, req *reflectPb.GetSchemeReq) (*reflectPb.GetSchemeResp, error) {
if req.Info == nil {
return nil, errors.New("info 不能为空")
}
fmt.Println("执行了方法, GetScheme")
endData := &reflectPb.GetSchemeResp{
Data: req.Path + ",gogogo",
Info: &reflectPb.GetSchemeRespInfo{
Info: fmt.Sprintf("这是一个info,%s", req.Info.Info),
Name: fmt.Sprintf("作者是%s", req.Info.Name),
},
}
return endData, nil
}
// 一元拦截器
func fgrpcInterceptor() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
fmt.Println("fgrpcInterceptor")
m, err := handler(ctx, req)
fmt.Println("fgrpcInterceptor end", m, err)
return m, err
}
}
func fgrpcInterceptorV1() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
fmt.Println("fgrpcInterceptorV1")
// return nil, fmt.Errorf("fgrpcInterceptorV1 异常")
m, err := handler(ctx, req)
fmt.Println("fgrpcInterceptorV1 end", m, err)
return m, err
}
}
func fgrpcInterceptorV2() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
fmt.Println("fgrpcInterceptorV2")
m, err := handler(ctx, req)
fmt.Println("fgrpcInterceptorV2 end", m, err)
return m, err
}
}
// 自定义创建grpc server
func newGrpcServer() *grpc.Server {
opts := []grpc.ServerOption{}
// 默认客户端5s没有完成连接,自动断开
opts = append(opts, grpc.ConnectionTimeout(5*time.Second))
// 添加拦截器
opts = append(opts,
grpc.ChainUnaryInterceptor(
fgrpcInterceptor(),
fgrpcInterceptorV1(),
),
grpc.UnaryInterceptor(fgrpcInterceptorV2()),
)
s := grpc.NewServer(opts...)
return s
}
// 启动grpc
func runGrpc(s *grpc.Server) {
address := "localhost:8090"
listen, err := net.Listen("tcp", address)
if err != nil {
panic(err.Error())
}
fmt.Printf("grpc服务启动成功:%v\n", address)
if err := s.Serve(listen); err != nil {
log.Fatalf("listen: %v\n", err)
}
}
func main() {
s := newGrpcServer()
reflectPb.RegisterDemoServiceServer(s, &DemoServiceServer{})
runGrpc(s)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。