Go-Micro+RabbitMQ 微服务 实现简单备忘录 (六)

129 阅读2分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」。

B站视频讲解地址

www.bilibili.com/video/BV1h4…

Github源码

github.com/CocaineCong…

Micro 主要有三部分组成:

  • go-micro - 开发 sdk, 包含了 RPC 框架,服务发现, 消息订阅/ 发布 等功能.
  • go-plugins - micro 插件
  • micro - Micro 提供的管理工具, 包含了 API 网关, 仪表盘, RPC 代理等功能.
模块说明
services微服务, 提供了对微服务功能开发的封装, 通过它可以快速创建一个微服务.
clientRPC 客户端, 提供了诸如 服务发现 / 负载均衡 / RPC 代理和调用。以及失败时的重试 / 超时 / 上下文等功能。
serverRPC 服务端, 提供了如何实现 RPC 请求的方法, 功能逻辑主要使用这个实现.
codec数据编码 模块, 提供将程序调用数据转换成 RPC 调用数据的功能. 目前支持: json / protobuf
brokerpub/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 测试

  • 创建备忘录

在这里插入图片描述 在这里插入图片描述

  • 展示用户备忘录

在这里插入图片描述

  • 修改备忘录

在这里插入图片描述 在这里插入图片描述