TypechoJoeTheme

Toasobi的博客

搜索到 18 篇与 的结果 ———学习笔记
2022-09-15

go-zero添加中间件,handler划分group

go-zero添加中间件,handler划分group
go-zero不支持对单个handler添加中间件,只能先定义一个组再对组加。以下为局部中间件示例这里还划分了handler的group然后生成代码,就会自动生成middleware文件,在里面正常编写中间件即可然后记得要在svc下添加中间件初始化,类型是rest.Middleware,初始化则是middleware.NewTestMiddleware().Handle全局中间件呢?一般在user.go中添加。先新建一个与user.api同级的文件夹common,再在下面建一个middleware,里面编写一些全局中间件(同样要拿到局部中间件的格式编写)。然后在user.go下添加这么一行代码 server.Use(middleware.NewSetUidToCtxMiddleware().Handle) //注意这里的middleware是全局middleware,不要调用错了补充:在全局中间件和局部中间件都存在的时候,先用的是全局的中间件,再用的局部的中间件,接着进逻辑,再出局部,最后出全局。
2022-09-15

go-zero专题

0 阅读
0 评论
2022年09月15日
0 阅读
0 评论
2022-09-15

go-zero api与rpc的三种连接方式

go-zero api与rpc的三种连接方式
注:本篇文章的代码部分基于该专题的go-zero从零到注册etcd文章所实现的代码api与rpc之间的连接方式有三种,分别是直连,k8s和etcd,下面我们分别讲解各连接特性以及方式etcd服务发现相较于直连,etcd多用于机器比较多的时候(配集群连接,多个节点)使用,可以动态发现服务,从而不需要更改api并重新发布。那go-zero里面如何使用etcd?我们首先看user-api和user-rpc下的yaml文件[图片上传中...(12472-4xm3sk3opr3)]可以这么说,rpc的配置文件中配置了etcd,那么久默认启动了etcd功能在user-api的yaml文件中启用了一个别名UserRpcConf,在config.go中映射,类型是zrpc.RpcClientConf[图片上传中...(59591-dl3adespl4c)]点进去可以看到该类型包含etcd的字段[图片上传中...(63105-wcmxpdey5sj)]再看看初始化配置的地方svc,这里和logic关联很大可以看到这里通过UserRpcConf配置初始化了客户端那etcd启动后代码流程大致是怎么样的...
2022-09-15

go-zero专题

0 阅读
0 评论
2022年09月15日
0 阅读
0 评论
2022-09-14

go-zero 从零到etcd注册

go-zero 从零到etcd注册
本文章手把手教学从go-zero环境搭建到调用rpc并注册etcd。为了更加直观,我决定实现一个用户查询的方法并连接数据库,模拟真实场景下的go-zero开发。第一步:生成api业务代码首先看下分包一般分包采用这种格式,这里简单编写了一下api文件,包含作者信息,请求体和响应体以及需要注册的路由。之后我们便可以通过api文件通过一行代码用goctl生成代码了(没有goctl的去github下拉取即可)@生成api业务代码 : 进入"服务api目录下,执行下面命令 goctl api go -api *.api -dir ../ --style=goZero //这里注意可能会报错,因为可能要明确指定api文件名字 生成完之后自动生成的文件基本上除了逻辑都最好不要动了生成代码如下:补充:1.基于user.go生成dockerfile:goctl docker -go user.go 2.根据api文件生成md文件:**goctl api doc --dir ./** (进入到user-api文件夹中) 第二步:编写proto生成pb文件,生成user-rpc我们现在项...
2022-09-14

go-zero专题

0 阅读
0 评论
2022年09月14日
0 阅读
0 评论
2022-08-06

etcd概念与原理解释

etcd概念与原理解释
etc在linux系统中是配置文件目录名,etcd就是配置服务etcd基于Go语言实现,主要用于共享配置,服务发现,集群监控,leader选举,分布式锁等场景服务发现: 假设有很多服务提供方和服务请求方,他们都会连接到etcd,(数据中心)。当服务提供方发布新服务,etcd的特性能够让服务请求方快速发现并连接新服务。leader选举:首先服务提供方的原理是master-slave这么一个架构,master下面有许多slave节点,一旦etcd检测到master宕机,则会根据剩下的slave节点选举一个master节点来对外提供服务分布式锁:应用于分布式系统中,众所周知,一个进程中,锁的持有以及释放对象:线程。分布式锁为了解决多个服务(进程)竞争一个临界资源的问题。这里我们可以添加一个etcd,所有服务都会连接etcd,那么可以由etcd对他们分发锁和释放锁。没有获取到锁的服务即阻塞,等待上一个服务获取完临界资源后释放锁。。机制,作用etcd可以保存重要少量文件,不能存储大量数据,是一个key value型的数据库简单的kv操作 put del get监控key值变化 watch ...
2022-08-06

分布式

0 阅读
0 评论
2022年08月06日
0 阅读
0 评论
2022-08-01

Golang并发编程笔记

Golang并发编程笔记
同步实现基础暴力就是用time.sleep()了,更好的办法是用sync.WaitGroup来实现goroutine的同步可增长栈os线程通常有固定的栈内存,一个goroutine的栈在其生命周期开始时只有很小的内存(2kb),但是往后其内存不固定,会根据情况自动调整大小,最大可达到1g。一般情况一个go线程用内存很小,所以即是开十万个goroutine也没有啥问题goroutine调度系统GPMgo语言自己实现的一套调度系统。区别于操作系统调度OS线程。1.G很好理解,就是个goroutine的,里面除了存放本goroutine信息外 还有与所在P的绑定等信息。2.P管理着一组goroutine队列,P里面会存储当前goroutine运行的上下文环境(函数指针,堆栈地址及地址边界),P会对自己管理的goroutine队列做一些调度(比如把占用CPU时间较长的goroutine暂停、运行后续的goroutine等等)当自己的队列消费完了就去全局队列里取,如果全局队列里也消费完了会去其他P的队列里抢任务。3.M(machine)是Go运行时(runtime)对操作系统内核线程的虚拟...
2022-08-01

笔记归纳

0 阅读
0 评论
2022年08月01日
0 阅读
0 评论