「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」。
B站视频讲解地址
Github源码
Micro 主要有三部分组成:
- go-micro - 开发 sdk, 包含了 RPC 框架,服务发现, 消息订阅/ 发布 等功能.
- go-plugins - micro 插件
- micro - Micro 提供的管理工具, 包含了 API 网关, 仪表盘, RPC 代理等功能.
模块 | 说明 |
---|---|
services | 微服务, 提供了对微服务功能开发的封装, 通过它可以快速创建一个微服务. |
client | RPC 客户端, 提供了诸如 服务发现 / 负载均衡 / RPC 代理和调用。以及失败时的重试 / 超时 / 上下文等功能。 |
server | RPC 服务端, 提供了如何实现 RPC 请求的方法, 功能逻辑主要使用这个实现. |
codec | 数据编码 模块, 提供将程序调用数据转换成 RPC 调用数据的功能. 目前支持: json / protobuf |
broker | pub/sub 模块, 提供事件 发布 / 订阅 功能, 目前支持: nats / rabbitmq / http(开发) |
transport | 数据传输 模块, 通过抽象实现对传输协议的无缝替换。目前支持: http / rabbitmq / nats |
regediry | 服务发现 模块, 提供 集群的服务发现功能, 目前支持: consul / etcd / memory / kubernetes |
selector | 负载均衡 模块, 当 client 发出请求时, 它负责在多个满足条件的服务器列表中决定使用哪个服务器, 目前支持: 循环 / 哈希 / 黑名单 |
3. 接入网关
3.1 接入路由
- api-gateway/weblib/handlers
//备忘录服务
authed.GET("tasks", handlers.GetTaskList)
authed.POST("task", handlers.CreateTask)
authed.GET("task/:id", handlers.GetTaskDetail)
authed.DELETE("task/:id", handlers.DeleteTask)
authed.PUT("task/:id", handlers.UpdateTask)
3.2 编写接口(创建备忘录为例子)
注意这是一个多用户的备忘录,所以我们要确保的是创建到该用户的管理下的备忘录中。
所以我们就需要用到用户的id,所以就从Authorization中取出来。
func CreateTask(ginCtx *gin.Context) {
var taskReq services.TaskRequest
PanicIfTaskError(ginCtx.Bind(&taskReq))
//从gin.keys取出服务实例
claim,_ := util.ParseToken(ginCtx.GetHeader("Authorization"))
taskReq.Uid = uint64(claim.Id)
taskService := ginCtx.Keys["taskService"].(services.TaskService)
taskRes, err := taskService.CreateTask(context.Background(), &taskReq)
PanicIfTaskError(err)
ginCtx.JSON(200, gin.H{"data": taskRes.TaskDetail})
}
3.3 测试
- 创建备忘录
- 展示用户备忘录
- 修改备忘录