• golang入门笔记——gRPC


    单体架构和微服务架构

    单体架构
    在这里插入图片描述
    在这里插入图片描述

    微服务架构:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    protobuf

    在这里插入图片描述
    在这里插入图片描述

    protocol buffers

    准备工作:
    1.下载protocol buffers

    2.将下载后的bin目录放到环境变量

    3.go install github.com/golang/protobuf/protoc-gen-go@latest
    安装protoc-gen-go

    编写.proto文件:

    //指定的当前proto语法的版本,有2和3
    syntax="proto3";
    //option go_package="path:name"; path 表示生成的go文件的存放地址,会自动生成目录的name表示生成的go文件所属包名
    option go_package="../service";
    //指定等会文件生成出来的package
    package service;
    //消息传输的对象
    message User{
      string username=1;
      int32 age=22;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    编译生产go文件:

    protoc --go_out=../service  .\test.proto 
    //protoc --go_out=./service --go-grpc_out=./service .\test.proto
    
    • 1
    • 2

    序列化和反序列化操作:

    package main
    
    import (
    	"fmt"
    	"github.com/golang/protobuf/proto"
    	"test/service"
    )
    
    func main() {
    	user := &service.User{
    		Username: "zyj",
    		Age:      22,
    	}
    
    	//序列化的过程
    	marshal, err := proto.Marshal(user)
    
    	if err != nil {
    		panic(err)
    	}
    
    	//反序列化
    	newUser := &service.User{}
    	err = proto.Unmarshal(marshal, newUser)
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(newUser.String())
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    proto文件介绍

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    gRPC实例

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    实例:

    product.proto

    //指定的当前proto语法的版本,有2和3
    syntax="proto3";
    //option go_package="path:name"; path 表示生成的go文件的存放地址,会自动生成目录的name表示生成的go文件所属包名
    option go_package="../service";
    //指定等会文件生成出来的package
    package service;
    //消息传输的对象
    message ProductRequest{
      int32 prod_id=1;
    }
    
    message  ProductResponse{
      int32 prod_stock=1;
    }
    service ProdService{
      rpc GetProductStock(ProductRequest) returns(ProductResponse);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
     protoc --go_out=plugins=grpc:./  .\product.proto
    
    • 1

    product.go

    package service
    
    import (
    	"context"
    	"test/service"
    )
    
    var ProductService = &productService{}
    
    type productService struct {
    }
    
    func (p *productService) GetProductStock(ctx context.Context, request *ProductRequest) (*ProductResponse, error) {
    	//实现具体的业务逻辑
    	stock := p.GetStockById(request.ProdId)
    	return &main.ProductResponse{ProdStock: stock}, nil
    }
    
    func (p *productService) GetStockById(id int32) int32 {
    	return 100
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    service.go

    package main
    
    import (
    	"fmt"
    	"google.golang.org/grpc"
    	"net"
    	service2 "test/service/service"
    )
    
    func main() {
    	rpcSever := grpc.NewServer()
    
    	service2.RegisterProdServiceServer(rpcSever, service2.ProductService)
    
    	listener, err := net.Listen("tcp", ":8002")
    	if err != nil {
    		panic(err)
    	}
    	err = rpcSever.Serve(listener)
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println("启动gRPC成功")
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    client.go

    package main
    
    import (
    	"context"
    	"fmt"
    	"google.golang.org/grpc"
    	"google.golang.org/grpc/credentials/insecure"
    	"test/client/service"
    )
    
    func main() {
    	dial, err := grpc.Dial(":8002", grpc.WithTransportCredentials(insecure.NewCredentials()))
    	if err != nil {
    		panic(err)
    	}
    	defer dial.Close()
    	client := service.NewProdServiceClient(dial)
    	request := &service.ProductRequest{
    		ProdId: 123,
    	}
    	stockResponse, err := client.GetProductStock(context.Background(), request)
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println("查询成功!")
    	fmt.Println(stockResponse)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    生成自签证书:

    1.安装openssl:下载地址

    2.生成私钥文件

    openssl genrsa -des3 -out server.key 2048
    
    • 1

    3.创建证书请求

    openssl req -new -key server.key -out server.csr
    
    • 1

    4.生成server.crt

    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    
    • 1

    5.修改openssl.cnf文件
    在这里插入图片描述

    6.生成证书私钥server.key

    openssl genpkey -algorithm RSA -out server.key
    
    • 1

    7.通过私钥server.key生成证书请求文件server.csr

    openssl req -new -nodes -key server.key -out server.csr -days 3650 -config ./openssl.cnf -extensions v3_req
    
    • 1

    8.生成SAN证书

    openssl x509 -req -days 365 -in server.csr -out zyj.pem -CA server.crt -CAkey
    server.key -CAcreateserial -extfile ./openssl.cnf -extensions v3_req
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    华为OD:求字符串中所有整数的最小和
    【Flyway 介绍】
    gitlab查看、修改用户和邮箱,gitlab生成密钥
    Linux命令学习—Apache 服务器(下)
    重磅发布!汉威科技燃气安全一站式解决方案全面覆盖燃气安全最新需求
    自动化使用 ChatGPT 生成 PPT 大纲 - 基于 Python 和 PyAutoGUI
    Linux从入门到实战 ----时间日期类
    linux服务器安装mysql,jdk,tomcat,docker
    termius mac版无需登录注册直接永久使用
    【DataX】Dolphinscheduler调度Datax任务读取Hive分区表案例
  • 原文地址:https://blog.csdn.net/qq_43716830/article/details/126157334