Hertz开发后端应用 | 青训营笔记

120 阅读2分钟

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

本篇文章主要讲解如何使用hertz进行后端应用的开发。

在微服务系统设计中,应用业务一般不直接与数据打交道,而是向提供对应服务的微服务应用去获取数据。本项目(doushen,一个简易版douyin后端:github.com/ClubWeGo/do…) 我们将各个功能划分为5个微服务。

  • usermicro为用户微服务,维护用户的基本信息和一些社交交互信息的关键数据的冗余。
  • videomicro为视频微服,配合对象存储(本项目中为minio)进行视频信息的存储维护。
  • relationmicro为交互微服务,维护用户与其他用户的关注关系,好友关系等。另外本项目中还维护了基础的聊天服务的代码,本微服务中的聊天功能基于stream实现。
  • favoritemicro为社交服务的微服务,维护了用户的点赞信息和被点赞信息等。
  • commentmicro是评论微服务,维护视频的评论信息和用户的评论信息。

image.png

既然需要微服务,就需要建立服务之间的通信。

在本项目中,我们使用etcd作为服务的注册中心,所有的微服务在main.go入口处,通过NewEtcdRegistry获取etcd的注册服务中心,然后通过hertz提供的WithRegistry将本服务注册到etcd中。

image.png

hertz项目中的kitex_server层设计

在本项目中,我们将kitex的操作单独抽离到一个层,服务的请求相关,数据处理相关代码均存在于此。 我们在initmicro.go中实现Init函数来创建全局的为服务客户端程序。

image.png

image.png

然后在对应的名字命名的.go文件中实现对应的请求和操作逻辑。

image.png

以userservice.go为例:

image.png

如图是一个请求获取用户信息的协程,传入请求参数,将查询到的结果返回到对于的chan。respUserMap是一个缓存区为1的chan,接受map[int64]core.User类型传入(下图为相关调用代码);wg为*sync.WaitGroup用于等待同步,调用方来控制并发以及何时结束数据请求等待;errChan为errr的chan,用于从协程接受错误信息。

image.png

本篇先到这里,下篇继续。