微服务从代码到k8s部署应有尽有系列(六、订单服务)
我们用一个系列来讲解从需求到上线、从代码到k8s部署、从日志到监控等各个方面的微服务完整实践。
整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中间件,所用到的技术栈基本是go-zero项目组的自研组件,基本是go-zero全家桶了。
实战项目地址:https://github.com/Mikaelemmmm/go-zero-looklook
1、订单服务业务架构图
2、依赖关系
order-api(订单api)
- order-rpc(订单rpc)
- payment-rpc(支付rpc)
payment-rpc(支付rpc)
- mqueue-rpc(消息队列)
order-rpc(订单rpc)
- mqueue-rpc(消息队列)
- travel-rpc(民宿rpc)
3、订单举例
3.1 下订单
1、用户在去浏览travel服务中的民宿homestay看中选择日期之后要下单,调用下单api接口
app/order/cmd/api/desc/order.api
// 订单模块v1版本的接口
@server(
prefix: order/v1
group: homestayOrder
)
service order {
@doc "创建民宿订单"
@handler createHomestayOrder
post /homestayOrder/createHomestayOrder (CreateHomestayOrderReq) returns (CreateHomestayOrderResp)
.....
}
2、order-api中调用order-rpc
3、rpc中校验条件创建订单之后 ,会调用mqueue-rpc创建一个延迟关闭订单的消息队列
4、mqueue-rpc 延迟队列
延迟队列是用的asynq,asynq是基于redis的高性能队列,同时支持消息队列、定时队列、固定周期队列,但是我们这个项目为了演示go-zero官方的消息队列go-queue(go-queue是基于kafka的),所以消息队列用的go-queue,延迟队列、定时任务用asynq。这里注意,这里只是往延迟队列添加延迟任务,具体执行不在这里,那我们去看看20分钟之后具体执行的代码,在app/order/cmd/mq
5、延迟20分钟执行的任务队列
在app/order/cmd/mq,这里我要说明一下,go-zero官方goctl支持生成的服务目前是api、rpc,目前暂时还没有支持console、mq等,但是go-zero提供了ServiceGroup,方便我们管理我们自己任何的服务,所以在mq中我是用了ServiceGroup管理了服务,这也是官方推荐的使用方式,代码如下:
1)app/order/cmd/mq/order.go 首先我们看main.go
func main() {
flag.Parse()
var c config.Config
conf.MustLoad(*configFile, &c)
prometheus.StartAgent(c.Prometheus)
serviceGroup := service.NewServiceGroup()
defer serviceGroup.Stop()
for _, mq := range listen.Mqs(c) {
serviceGroup.Add(mq)
}
serviceGroup.Start()
}
ServiceGroup
可以添加任何service进去,但是如何成为一个service呢? 那你就要实现两个方法一个Starter、一个Stoper
2)我们在main中可以看到循环listen.Mqs(c) ,那我们看看listen.Mqs(c) 都有哪些
我们不止要监听asynq的延迟队列、定时队列,后面我们还想监听go-queue的kafka消息队列,在代码上我们考虑不想把go-queue的kafka消息队列跟asynq的延迟队列、定时队列放到一起去,所以这里做了个分类
3)asyny的延迟消息队列
定义asynq
定义路由
具体实现逻辑(关闭订单逻辑)
所以我们启动这个order-mq的时候,asynq就会被加载、定义路由,当我们之前添加的延迟队列到了20分钟,就会自动执行关闭订单逻辑,如果订单没有被支付,这里就会关闭掉订单,支付了就忽略掉了,这样就可以不用使用定时任务轮训关闭订单了,哈哈
3.2 订单列表
没啥逻辑,就是查出来显示罢了,自己看一下就好了
// 订单模块v1版本的接口
@server(
prefix: order/v1
group: homestayOrder
)
service order {
@doc "用户订单列表"
@handler userHomestayOrderList
post /homestayOrder/userHomestayOrderList (UserHomestayOrderListReq) returns (UserHomestayOrderListResp)
}
3.3 订单明细
没啥逻辑,就是查出来显示罢了,自己看一下就好了
// 订单模块v1版本的接口
@server(
prefix: order/v1
group: homestayOrder
)
service order {
@doc "用户订单明细"
@handler userHomestayOrderDetail
post /homestayOrder/userHomestayOrderDetail (UserHomestayOrderDetailReq) returns (UserHomestayOrderDetailResp)
}
4、结尾
下了订单,当然我们要支付了,那就看下一篇支付服务吧
项目地址
https://github.com/zeromicro/go-zero
欢迎使用 go-zero
并 star 支持我们!
微信交流群
关注『微服务实践』公众号并点击 交流群 获取社区群二维码。
微服务从代码到k8s部署应有尽有系列(六、订单服务)的更多相关文章
- 微服务从代码到k8s部署应有尽有系列(一)
从本篇文章开始,我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 实战项目地址:https://github.com/Mikaelemmmm/go-zer ...
- 微服务从代码到k8s部署应有尽有系列(二、网关)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(三、鉴权)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(四、用户中心)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(五、民宿服务)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(七、支付服务)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(八、各种队列)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(九、事务精讲)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
随机推荐
- 机器学习|线性回归三大评价指标实现『MAE, MSE, MAPE』(Python语言描述)
原文地址 ?传送门 对于回归预测结果,通常会有平均绝对误差.平均绝对百分比误差.均方误差等多个指标进行评价.这里,我们先介绍最常用的3个: 平均绝对误差(MAE) 就是绝对误差的平均值,它的计算公式如 ...
- Keil MDK STM32系列(六) 基于抽象外设库HAL的ADC模数转换
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Android官方文档翻译 一 Getting Started
Getting Started 让我们开始吧! Welcome to Training for Android developers. 欢迎来到Android开发者训练营. Here you'll f ...
- RHCSA 第四天
1.使用whereis 查找 locate命令 使用which查找whereis命令 使用locate查找rm命令 2.find命令使用: 使用find命令在当前路径下查找所有的普通文件 使用f ...
- 龙芯 3A4000 安装 Debian stable
2022-01-17 版权声明:原创文章,未经博主允许不得转载 3A5000 开始,龙芯转向 loongarch ,新的架构虽然甩掉了历史包袱,但也需要一段时间来积累生态.在这半年多的时间里, loo ...
- 通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二)
通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二) 效果:默认一直隐藏导航栏,当滚动条滚到超过300px按钮出现,点击回 ...
- idea 插件推荐
工欲善其事必先利其器,本文介绍几个自己在开发过程中常用的idea插件 安装方法 idea 里面在线安装 settings>plugins>marketplace 里面搜索安装 idea 官 ...
- Java动态绑定和静态绑定-多态
一.问题 Java方法调用过程中,Jvm是如何知道调用的是哪个类的方法?Jvm又是如何处理? 二.概念 a.当子类和父类(接口和实现类)存在同一个方法时,子类重写父类(接口)方法时,程序在运行时调 ...
- 如何在 VS Code 中搭建 Qt 开发环境
前言 VS Code 高大上的界面.强大的智能联想和庞大的插件市场,着实让人对他爱不释手.虽然可以更改 Qt Creator 的主题,但是 Qt Creator 的代码体验实在差劲.下面就来看看如何在 ...
- ApacheCN jQuery 译文集 20211121 更新
创建 jQueryMobile 移动应用 零.序言 一.jQueryMobile 原型制作 二.jQuery Mobile 网站 三.分析.长表单和前端验证 四.QR 码.地理位置.谷歌地图 API ...