Go项目(订单微服务)
简介
这部分开始梳理订单微服务的关键点 这里仿京东,订单结算在购物车进行,所以用户的操作是加入商品到购物车,进入购物车付款 从页面分析需求
点击添加到购物车,删除车中商品,更新商品数量和选中状态(其实就是购物车内的增删改),选中商品,创建订单,付款结算 订单列表及详情 表设计
包含三张表,订单商品表需要注意一下
type OrderGoods struct {
BaseModel
Order int32 `gorm:"type:int;index"`
Goods int32 `gorm:"type:int;index"`
GoodsName string `gorm:"type:varchar(100);index"`
GoodsImage string `gorm:"type:varchar(200)"`
GoodsPrice float32
Nums int32 `gorm:"type:int"`
}
建库建表_ = db. AutoMigrate ( & model. ShoppingCart{ } , & model. OrderInfo{ } , & model. OrderGoods{ } )
接口设计(定义proto)
更改 nacos 的本地和远程配置,启动服务看能否注册成功
handler
srv 层重点就是数据库操作,基本分三步
准备返回值(proto.struct) 根据请求参数操作数据+判空/判满,注意数据类型 填充返回值各字段 重点在新建订单 CreateOrder
接口,有一些要注意的地方 要调用商品微服务和库存微服务,srv 层互相调用
这个模仿商品微服务调用库存微服务即可,需要新增配置,拷贝过来 goods 和 inventory 的 stub 具体步骤
从购物车中获取到选中的商品 商品的价格要在这里再次查询 - 访问商品srv服务 库存的扣减 - 访问库存服务 往订单信息表/订单商品表里插入数据,批量插入 CreateInBatches
从购物车中删除已购买的记录 注:这里要操作两个表:订单信息表,订单商品表 还有一个主要的问题,数据库操作应该使用事务
包含两方面,操作本地订单表时使用 MySQL 事务;库存扣除调用的是其他服务,应该用分布式事务 (不是分布式锁) TODO 注意问题发生的场景,解决方案有哪些优缺点,这些都是积累经验哈
UT
一定要做接口测试,这是后端基本素养,至于产品的自动化测试比较复杂,整个系统上线后会做
这里后端测试暂时没有用 go 内置的单元测试,效果一样哈(go 也没有内置断言,依赖第三方包),后续会有专门的章节写 UTvar orderClient proto. OrderClient
var conn * grpc. ClientConn
func TestCreateCartItem ( userId, nums, goodsId int32 ) {
rsp, err := orderClient. CreateCartItem ( context. Background ( ) , & proto. CartItemRequest{
UserId: userId,
Nums: nums,
GoodsId: goodsId,
} )
if err != nil {
panic ( err)
}
fmt. Println ( rsp. Id)
}
func Init ( ) {
var err error
conn, err = grpc. Dial ( "127.0.0.1:50051" , grpc. WithInsecure ( ) )
if err != nil {
panic ( err)
}
orderClient = proto. NewOrderClient ( conn)
}
func main ( ) {
Init ( )
TestOrderList ( )
conn. Close ( )
}
web
快速开发订单服务 web 层 查找替换为 order-web,修改 nacos 的配置,复制 stub 文件,修改接口,修改路由,启动测试 API 层要响应前端请求,调用 srv 的接口,接口还是根据前端界面分析
订单相关:新建订单(form表单验证,传递用户信息),订单详情,订单列表 支付相关:先看支付服务 购物车相关:商品列表,加入商品(定义form表单传参) 测试
这块还需要结合支付服务,返回给用户支付的 url,先去梳理支付逻辑
但是申请支付宝的支付服务需要网站域名,且要公司性质才可以,个人无法申请 但总不能服务上线公司创建才能开发吧?于是它提供了沙箱环境 ,只需切换配置即可上线
支付服务
Notify
这里服务器需要验证支付宝的消息,使用支付宝的公钥Z
这部分在 GetTradeNotification 的 VerifySign 中完成 获取支付状态,更新订单表 返回给支付宝状态,否则支付宝会进行最大努力通知
小结
这部分快速实现了订单微服务的 srv 层和 API 层 接下来快速开发用户操作微服务,前后端联调
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393616.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!