Grpc第一个案例

学习笔记:

service端:

目录结构
在这里插入图片描述

proto 文件:

syntax = "proto3";
package services;
message ProdRequest{
  int32 prod_id=1;  //传入id
}
message ProtoResponse{
  int32 prod_stock=1;    //商品库存
}

service ProdServic{
   rpc GetProdStock(ProdRequest) returns(ProtoResponse);
}
//protoc --go_out=../services Prod.proto
//protoc --go_out=plugins=grpc:../services Prod.proto  生成grpc 代码

进入到 pb目录下 执行:

protoc --go_out=plugins=grpc:../services Prod.proto  生成grpc 代码

ProdService.go 文件代码:

package services

import (
	"context"
	"fmt"
)

type ProdService struct {   
	
}

//实现grpc 方法
func (this *ProdService)GetProdStock(ctx context.Context, requst *ProdRequest) (*ProtoResponse, error)  {

	fmt.Println("req=",requst.ProdId)  //接收到客户端的数据
	id:=requst.ProdId   //逻辑处理

	return &ProtoResponse{ProdStock:id},nil
}

service.go 文件代码:

package main

import (
	"google.golang.org/grpc"
	"grpcpro/services"
	"log"
	"net"
)

func main()  {

	rpcService := grpc.NewServer()
	services.RegisterProdServicServer(rpcService,new(services.ProdService))
    lis,_:= net.Listen("tcp",":8081")
	err:=rpcService.Serve(lis)
	if err!=nil{
		log.Panic(err)
	}

}

客户端:

目录结构:
Prod.pb.go 是从serve端拷贝 Prod.pb.go来的,当然你也可以重新生成。
在这里插入图片描述

main.go 文件代码

package main

import (
	"client/services"
	"context"
	"fmt"
	"google.golang.org/grpc"
	"log"
)

func main()  {
	conn,err:=grpc.Dial(":8081",grpc.WithInsecure())
	if err!=nil{
		log.Panic(err)
	}

	defer conn.Close()

	prodClient:=services.NewProdServicClient(conn)

	predRequse,err:=prodClient.GetProdStock(context.Background(),&services.ProdRequest{ProdId: 12})
	if err!=nil{
		log.Panic(err)
	}
	fmt.Println("darta=",predRequse.ProdStock)


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值