这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
本篇文章介绍hertz实现的业务层代码如何与kitex生成的微服务进行调用。
kitex生成代码的时候,会根据我们定义的idl文件的 namespace go usermicro在kitex_gen中生成对应的模块:
进入文件夹,外层的单独go文件是idl中定义的模型结构体及其校验相关的代码。
userservice中的是服务的接口实现,以及客户端的接口实现。
上面这个usermicro文件夹内部的所有文件,是我们在写服务端和客户端代码时候公用的代码。
最近做项目,看到很多项目里面,微服务的代码和api服务的代码是放到一起的,对于这种组织方式,他们采用的便是把usermicro这个文件夹统一整理到api的项目中,然后当成本地模块进行调用。
私以为,如果是微服务的化,就要体系出模块的独立性,所以我认为微服务模块应该是独立于api程序的。在我们的项目中,我们选择将每个微服务均建成一个单独的github仓库。对于api程序,他需要的是去go get这些微服务,然后调用微服务库的kitex_gen下的对应模块。
我们在api应用这里,单独维护了一层,用于去创建各个微服务的客户端
如图,kitex_server
内部结构如下:
initmicro中实现了实例化客户端的代码:
对应服务.go文件中则进一步对微服务接口进行包装,以服务本地api的需求。类似下面这样
在api应用的main.go中,我们需要主动调用写好的初始化函数,去init全局的微服务客户端:
这篇结束,使用kitex和gorm开发微服务的介绍就结束了。接下来几篇,我会介绍hertz中如何配合minio实现文件的存储方案以及基于redis stream的聊天微服务的实现。