【grpc】内容回顾

建议先看官网了解概念,点击跳转到官网

proto约束文件介绍

命令

message关键字

相当于golang里的结构体

  • 字段规则

repeated:代表切片等可重复类型

options:其他默认是options

  • 消息号

message中每个字段必须有一个唯一标识号

服务定义

`rpc 服务函数名()returns()`

服务端编写

  • 写服务端实际的服务逻辑
  • 创建grpcserver对象→server端的抽象对象
  • 将编写的服务注册到grpcserver中
  • 创建listen,grpcserver启动服务,listen监听server端口

客户端编写

  • grpc连接到server端,加密认证
  • 获得与server端连接的客户端
  • 客户端执行rpc调用

认证-安全传输

多个server与client之间的认证

  • SSL/TSL认证
  • Token认证
  • 不安全连接
  • 自定义身份认证

加入证书,实现安全调用

https://www.kuangstudy.com/bbs/1604044550878703617

认证方式

SSL/TLS认证
命令:
生成私钥
openssl genrsa -out server.key 2048
生成证书
openssl req -new -x509 -key server.key -out server.crt -days 36500(有效期)
生成证书签名请求文件
openssl req -new -key server.key -out server.csr修改配置文件cp openssl.cnf keycopy_extensions = copyreq_extensions = v3_req # The extensions to add to a certificate request[ v3_req ]中添加 subjectAltName = @alt_names添加标签:[alt_names]DNS.1=*.zy.com=》只有这个域名可以访问到代码生成证书私钥test.keyopenssl genpkey -algorithm RSA -out test.key
生产证书请求文件test.csropenssl req -new -nodes -key test.key -out test.csr -days 3650 -subj"/C=cn/OU=myorg/O=mycomp/CN=myname" -config ./openssl.cnf -extensions v3_req
生成SAN证书pem
openssl x509 -req -days 365 -in test.csr -out test.pem -CA
server.crt -CAcreateserial -extfile ./openssl.cnf -extensions v3_req
改正版命令:
sudo openssl x509 -req -days 365 -in test.csr -out test.pem
-CA /usr/local/sdk/go/src/hello/key/server.crt
-CAkey /usr/local/sdk/go/src/hello/key/server.key
-CAcreateserial -extfile ./openssl.cnf -extensions v3_req

认证生成私钥证书文件命令在hello-server key 命令.txt文件中

  • server端传入.key文件,.pem文件生成证书
  • 在创建grpcserver时将证书塞进去
  • client端传入.pem文件和域名生成证书
  • 再获得conn连接时,塞入证书
Token认证
  • 将客户端实现有关Token的接口:GetRequestMetadata →返回携带信息,RequireTransportSecurity→是否开启ssl
  • 客户端获得携带ssl与token的切片
  • server端在服务(不推荐)或者拦截器中校验token令牌

可以与SSL/TLS结合

go-zero基础

简介

微服务

将大系统按照功能或者产品进行服务拆分→独立的服务

服务间通信→rpc通信连接

准备工具

Etcd

→是什么:etcd是一个高可用的分布式键值存储系统。采用Raft一致性算法保证数据的强一致性,并支持对数据进行监听更新。
→用途:微服务的配置中心,服务发现

→理解:数据可靠性更强,加强版redis

etcd的基本命令  1.etcdctl put name zy  2.etcdctl get name->返回键值对  3.etcdctl get name --print-value-only->只希望返回值  4.etcdctl get na --prefix->返回前缀符合条件的键值对  5.etcdctl watch name->监听键的变化  6.etcdctl del name->删除键

命令:

zsy@zsy-21CY:/usr/local/sdk/go/src/zero-study/user/rpc$ goctl rpc protoc user.proto --go_out=types --go-grpc_out=types --zrpc_out=.

goctl api go -api video/api/video.api -dir video/api/

api服务

api go -api xxx.api -dir .

api语法

syntax = “v1”

type :类似于结构体→请求体、响应体、实例

  • 支持结构体嵌套和引用

service:定义微服务

  • @handler 方法名
  • 请求方法 路由 请求、响应

@server():控制对http服务生成时meta信息

  • group:路由分组目录
  • prefix:路由前缀
  • jwt:鉴权Auth 值为 jwt 密钥,过期 等信息配置的 golang 结构体名称
  1. 在user.yaml中配置秘钥与过期时间
  • middleware:中间件
  • timeout:3s超时控制,值为 time.Duration
  • maxBytes: 最大请求控制

api封装

避免重复写响应体的重复字段信息。我们可以将 codemsg 抽象在 base.api 中,然后 user.api 中复用和定义具体的响应结构体即可。

http服务→main.api→引入没有service块的api

结构体→xxx.api

api命令

goctl api new demo
goctl api go -api xxx.api -dir. 

类似的proto文件生成代码命令:

 goctl rpc new demo

但rpc需要在配置文件中添加代码

`etc/demo.yaml:`
Name: demo.rpc
ListenOn: 0.0.0.0:8080
Mode: dev

api格式化命令:

goctl api format —dir demo.api

jwt鉴权实现

  • @server(jwt:Auth)
  • 在xxx.yaml文件中配置秘钥以及有效期
  • 在公共目录中完成jwt的签发逻辑
  • login后获得jwt签发的token,并返回
  • 在main函数中加入鉴权失败的回调函数,说明鉴权失败的原因。

操作mysql

生成model代码

goctl model mysql ddl —src xx.sql —dir .(有表)

→自动加入了增删改的代码

→也可以自己添加手写sql

model代码使用

  • 再config写上mysql配置→数据源
  • 在xxx.yaml文件中配置数据源
  • 在svn包里的创建mysql连接
  • 登录逻辑中可以查询数据库了

结合gorm

→开发更加高效

  • 在models创建type,引入gorm.Model(直接编写model文件)
  • 在common中加入初始化gorm的代码
  • config.go中不变
  • svc中连接mysql
  • login逻辑中使用gorm

rpc服务

单rpc服务模式

编写一个proto文件在service块添加rpc→通过命令[goctl rpc protoc user.proto --go_out=./types --go-grpc_out=./types --zrpc_out=.]生成对应的文件,其中rpc文件生成在types文件夹中→补充逻辑就行了

服务分组

proto文件在不同的service块放不同的rpc服务→在命令后面加上-m

结合gorm

proto文件→命令→配置文件.yaml文件添加mysql数据库信息→config.go添加mysql映射→svc依赖注入mysql,初始化连接数据库→补充逻辑

结合api

api文件→命令goctl api go -api user.api -dir .

配置文件里写rpc服务的key→填写配置文件→svc依赖注入rpc客户端→逻辑写一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 语法学习 day9

一.编程题错题反思 1.删除列表中的奇数(易错题) num input().split() flag 0 for i in range(len(num)): num[i] int(num[i]) for i in range(len(num)): if flag ! 0: i - flag if num[i] % 2 ! 0: num.remove(num[i]) flag 1 pr…

PySide(PyQt),csv文件的显示

1、正常显示csv文件 import sys import csv from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QWidgetclass CSVTableWidgetDemo(QMainWindow):def __init__(self):super().__init__()# 创建显示控件self.widget QWidget(self)sel…

在SpringCloud中实现服务监控与告警的业务指标监控

在Spring Cloud中,可以使用一些工具和框架来实现服务监控与告警的业务指标监控。本文将介绍一种常用的方案,使用Prometheus和Grafana来实现监控指标的采集和展示,并结合Alertmanager实现告警功能。 Prometheus简介 Prometheus是一款开源的监控…

动手学深度学习——3.多层感知机

1.线性模型 线性模型可能出错 例如,线性意味着单调假设: 任何特征的增大都会导致模型输出的增大(如果对应的权重为正), 或者导致模型输出的减小(如果对应的权重为负)。 有时这是有道理的。 例…

ENSP防火墙NAT智能选举综合实验

实验目的及其拓扑图: 创建我的拓扑: 新建修改配置fw1上的nat策略和安全策略: pc2ping1.1.1.1测试结果: 服务器映射配置: 配置对应安全策略: 配置fw2,子公司的NAT策略: 配置全局选路路…

代码随想三刷图论篇2

代码随想三刷图论篇2 104. 建造最大岛屿题目代码 110. 字符串接龙题目代码 105. 有向图的完全可达性题目代码 106. 岛屿的周长题目代码 104. 建造最大岛屿 题目 链接 代码 import java.util.*; class Main{public static void main(String[] args){Scanner sc new Scanner…

安全运营概述

安全运营概述 概述安全运营的工作对内安全运营工作对外安全运营工作品牌建设 概述 安全是一个过程,安全是靠运营出来的,公司会不断的有新业务的变更,新产品的发布,新版本的升级,技术架构的升级,底层系统的…

Commons-Collections篇-CC6链分析

前言 我们前两篇已经分析过URLDNS链和CC1链,我们这次分析的链就是基于前两条链之上的CC6链 CC6链的使用对于版本来说没有CC1限制那么大,只需要commons collections 小于等于3.2.1,都存在这个漏洞 0.环境安装 可以接着使用我们之前分析CC1链…

AV1技术学习:Affine Motion Compensation

一、Affine Model Parameter 除了传统的平移运动补偿,AV1 还支持仿射变换模型,将当前像素点 (x, y) 通过以下方式投影到参考帧中的预测像素点 (x, y). 参数 (h13, h23) 对应于平移模型中使用的常规运动向量。 参数 h11 和 h22 控制垂直和水平轴上的比例…

unseping

nnnd,这道题谁标的难度1!参考文章:江苏工匠杯-unseping&序列化,正则绕过(全网最简单的wp)_江苏工匠杯unseping-CSDN博客 这是这道题的源码,一看exec和unserialize就是反序列化和命令执行,还有个正则应…

JS【详解】函数 (声明函数、调用函数、函数表达式、匿名函数、立即执行函数、箭头函数、内置函数、回调函数、私有函数、高阶函数、模拟函数重载)

函数用于封装一段具有特定功能代码,通过调用的形式执行。 每个函数都有返回值,无 return 语句时返回 undefined 声明函数 在浏览器中,在最外层声明的函数,都是 Window 对象的方法函数的声明会被提前:可以在函数声明之…

QThread和std::thread

在 Qt 中, 我们经常会用到多线程,这时候就需要纠结是使用 Qt 的 QThread 还是使用 C 标准库的 std::thread。 这里记录一下我自己的理解,先介绍一下 QThread 和 std::thread 的使用方法,对比一下他们的不同,最后说一下…

【Redis】集群

文章目录 一、集群是什么?二、 Redis集群分布式存储为什么redis集群的最大槽数是16384(不太懂)redis的集群主节点数量基本不可能超过1000个 三、 配置集群(三主三从)3.1 配置config文件3.2 启动六台redis3.2 通过redis…

理兔chat开发日记

1.注册 注册跟以前的差不多,我们将我们的验证码放在redis下,我们在注册的时候先判断我们输入的验证码是否正确 验证码成功后在我们的实现类中,我们先判断邮箱是否重复,不重复我们就继续注册 我们拥有联号注册的功能,就…

unity局部坐标和世界坐标角度介绍

在Unity中,局部坐标(Local Coordinates)和世界坐标(World Coordinates)是描述物体位置的两种不同方式: 局部坐标(Local Coordinates): 局部坐标是相对于物体自身的坐标系…

Puppeteer 是什么以及如何在网络抓取中使用它 | 2024 完整指南

网页抓取已经成为任何处理网页数据提取的人都必须掌握的一项重要技能。无论你是开发者、数据科学家还是希望从网站收集信息的爱好者,Puppeteer都是你可以使用的最强大工具之一。本完整指南将深入探讨什么是Puppeteer以及如何有效地在网页抓取中使用它。 Puppeteer简…

日志的编写与线程池的结合

目录 一、认识日志 二、时间的等级划分 三、日志的输出端 3.1 保存至文件 四、日志的部分信息 4.1 日志等级 4.2 日志时间 五、加载日志 六、日志的宏编写 七、ThreadPool Log 一、认识日志 记录事件: 日志用于记录系统运行过程中发生的各种事件&…

Linux硬件中断(IRQ)的基础知识

目录 一、中断的概念1.1 什么是硬件中断1.2 中断类型二、中断处理的工作原理2.1 中断请求2.2 中断向量2.3 中断服务例程(ISR)2.4 上下文切换2.5 中断处理2.6 任务恢复三、中断处理的编程3.1 注册中断处理函数3.2 注销中断处理函数四、中断和系统性能4.1 中断风暴4.2 IRQ亲和性…

创作模板四【创作模板】

xxx【创作模板四】 前言推荐说明最后 前言 2023年7月7日 以下内容源自《【创作模板四】》 仅供学习交流使用 推荐 无 说明 大三下期末考试进行中 【最后】的文案: 当时期末复习总结的文章,很少有人点赞 确实是很失望,只能自娱自乐&…

数据库SQL Server时间函数Datetime

文章目录 SQL Server 提供了一系列用于处理日期和时间的函数,以下是一些常用的时间函数: GETDATE():返回当前的日期和时间。 SELECT GETDATE();CURRENT_TIMESTAMP:与 GETDATE() 类似,返回当前的日期和时间。 SELECT…