- protoc 安装
- 进入 protobuf release 页面,选择适合自己操作系统的压缩包文件
- 解压
protoc-x.x.x-osx-x86_64.zip并进入protoc-x.x.x-osx-x86_64
$ cd protoc-x.x.x-osx-x86_64/bin
- 将启动的
protoc二进制文件移动到被添加到环境变量的任意 path下,如$GOPATH/bin,这里不建议直接将其和系统的以下path放在一起。
$ mv protoc $GOPATH/bin
tip:
$GOPATH为你本机的实际文件夹地址
- 验证安装结果
$ protoc --version
libprotoc x.x.x
- protoc-gen-go/protoc-gen-go-grpc 安装
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
- gRPC 资料
- 链接:gRPC基于Go快速开始
- 安装:
go get -u google.golang.org/grpc
protoc 生成 GO 代码:
$ protoc --proto_path=proto proto/*.proto --go_out=plugins=grpc:pb
- Clang-Format proto 格式化工具
- 链接:LLVM-14.0.6-win64.exe
- 介绍:可用于格式化(排版)多种不同语言的代码。其自带的排版格式主要有:LLVM, Google, Chromium, Mozilla, WebKit等
若
-style=google,则表示应用Google的格式化风格 - 安装(window):从链接处下载之后就可以进行安装了,安装时注意勾选环境变量
- 检查下是否安装成功:
clang-format -version
- Evans
-
链接:Evans
-
介绍:
Evans是一款超酷的gRPC客户端,可让你构建并在交互式shell中将请求发送到gRPC服务器。 -
安装:
- 进入 Evans release 页面,选择适合自己操作系统的压缩包文件
- 解压
evans_xx_xx.tar.gz并进入evans_xx_xx.tar,
$ cd evans_xx_xx.tar.gz- 再解压
evans_xx_xx.tar并进入evans_xx_xx,
$ cd evans_xx_xx- 将启动的
evans二进制文件移动到被添加到环境变量的任意 path下,如$GOPATH/bin,这里不建议直接将其和系统的以下path放在一起。
$ mv evans $GOPATH/bintip:
$GOPATH为你本机的实际文件夹地址- 验证安装结果
$ evans --version evans 0.10.8 -
go install:
go install github.com/ktr0731/evans@latest -
使用:
连接服务器:
$ evans -r repl -p 8080查看服务上所有可用的软件包:
$ show package选择特定的软件包:
$ package proto显示该软件包所有的服务:
$ show service显示该软件包所有的消息
$ show message获取消息格式:
$ desc XxxxRequest选择某个服务:
$ service LaptopService待用该服务下的 API:
$ call CreateLaptop调用API下,停止重复字段输入,使用
Ctrl + D
- Nginx
- 下载链接:http://nginx.org/en/download.html
- 负载均衡:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 10;
}
http {
access_log logs/access.log;
upstream pcbook_service {
server 127.0.0.1:50051;
server 127.0.0.1:50052;
}
server {
listen 8080 http2;
location / {
grpc_pass grpc://pcbook_service;
}
}
}
- 负载均衡-SSL:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 10;
}
http {
access_log logs/access.log;
upstream pcbook_service {
server 127.0.0.1:50051;
server 127.0.0.1:50052;
}
server {
listen 8080 ssl http2;
ssl_certificate ../cert/server-cert.pem;
ssl_certificate_key ../cert/server-key.pem;
ssl_client_certificate ../cert/ca-cert.pem;
ssl_verify_client on;
location / {
grpc_pass grpc://pcbook_service;
}
}
}
- 负载均衡-SSL-服务器和Nginx之间授信(双向TLS):
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 10;
}
http {
access_log logs/access.log;
upstream auth_service {
server 127.0.0.1:50051;
server 127.0.0.1:50052;
}
server {
listen 8080 ssl http2;
ssl_certificate ../cert/server-cert.pem;
ssl_certificate_key ../cert/server-key.pem;
ssl_client_certificate ../cert/ca-cert.pem;
ssl_verify_client on;
location / {
grpc_pass grpcs://pcbook_service;
grpc_ssl_certificate ../cert/server-cert.pem;
grpc_ssl_certificate_key ../cert/server-key.pem;
}
}
}
- 负载均衡-SSL-服务器和Nginx之间授信(双向TLS)-指定rpc:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 10;
}
http {
access_log logs/access.log;
upstream auth_services {
server 127.0.0.1:50051;
}
upstream laptop_services {
server 127.0.0.1:50052;
}
server {
listen 8080 ssl http2;
ssl_certificate ../cert/server-cert.pem;
ssl_certificate_key ../cert/server-key.pem;
ssl_client_certificate ../cert/ca-cert.pem;
ssl_verify_client on;
location /pcbook.AuthService {
grpc_pass grpcs://auth_services;
grpc_ssl_certificate ../cert/server-cert.pem;
grpc_ssl_certificate_key ../cert/server-key.pem;
}
location /pcbook.LaptopService {
grpc_pass grpcs://laptop_services;
grpc_ssl_certificate ../cert/server-cert.pem;
grpc_ssl_certificate_key ../cert/server-key.pem;
}
}
}
- grpc-gateway
- Swagger
- 链接:
-
jwt.io 解析 jwt token。
清除 ptotoc 生成的 Go 代码:
$ make clean
生成代码:
$ make gen
运行服务器1:
$ make server1
运行服务器2:
$ make server2
运行SSL/TLS服务器1:
$ make server1-tls
运行SSL/TLS服务器2:
$ make server2-tls
运行服务器(grpc):
$ make server
运行服务器(rest API):
$ make server-rest
运行客户端:
$ make client
运行SSL/TLS客户端:
$ make client
测试:
$ make test
运行生成 TLS 证书脚本:
$ make cert
- proto 文件
import导包红线, 在 vscode 中 首选项>设置>搜索“protoc”, 做如下修改:
"protoc": {
"path": "D:/Program Files/Go/bin/protoc",
"options": [
"--proto_path=proto",
]
}
将 path 改成 protoc 命令实际存储的位置,将 --proto_path 修改成项目 proto 源文件存储的目录