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;
}

编译生产go文件:

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

序列化和反序列化操作:

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())
}

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);
}
 protoc --go_out=plugins=grpc:./  .\product.proto

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
}

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成功")
}

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.安装openssl:下载地址

2.生成私钥文件

openssl genrsa -des3 -out server.key 2048

3.创建证书请求

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

4.生成server.crt

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

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

6.生成证书私钥server.key

openssl genpkey -algorithm RSA -out server.key

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

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

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值