使用kitex与gorm开发微服务-7 | 青训营笔记

114 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天

本篇文章介绍hertz实现的业务层代码如何与kitex生成的微服务进行调用。

kitex生成代码的时候,会根据我们定义的idl文件的 namespace go usermicro在kitex_gen中生成对应的模块:

image.png

进入文件夹,外层的单独go文件是idl中定义的模型结构体及其校验相关的代码。

image.png

userservice中的是服务的接口实现,以及客户端的接口实现。

image.png

上面这个usermicro文件夹内部的所有文件,是我们在写服务端和客户端代码时候公用的代码。

最近做项目,看到很多项目里面,微服务的代码和api服务的代码是放到一起的,对于这种组织方式,他们采用的便是把usermicro这个文件夹统一整理到api的项目中,然后当成本地模块进行调用。

私以为,如果是微服务的化,就要体系出模块的独立性,所以我认为微服务模块应该是独立于api程序的。在我们的项目中,我们选择将每个微服务均建成一个单独的github仓库。对于api程序,他需要的是去go get这些微服务,然后调用微服务库的kitex_gen下的对应模块。

我们在api应用这里,单独维护了一层,用于去创建各个微服务的客户端

如图,kitex_server

image.png

内部结构如下:

image.png

initmicro中实现了实例化客户端的代码:

image.png

对应服务.go文件中则进一步对微服务接口进行包装,以服务本地api的需求。类似下面这样

image.png

在api应用的main.go中,我们需要主动调用写好的初始化函数,去init全局的微服务客户端:

image.png

这篇结束,使用kitex和gorm开发微服务的介绍就结束了。接下来几篇,我会介绍hertz中如何配合minio实现文件的存储方案以及基于redis stream的聊天微服务的实现。