单体服务中,模块之间相互调用怎么优雅地实现?

127 天前
 gosky
之前都是写微服务,单体服务还真就不怎么会写

两个模块:商品和订单
眼下有这么两个流程:
一、用户下单:创建虚拟商品,创建订单。
二、用户支付:订单状态更新为已支付,虚拟商品出库。

注意:
一、要符合模块自治的要求。商品的操作在商品模块实现,订单的操作在订单模块实现
二、整个流程,要么全部成功或失败,要么支持回滚

如果是微服务,可由上层服务组合这些操作,也大概率会有一个可以重试的消息队列。
但现在是单体服务,还没有消息队列
1319 次点击
所在节点    编程
6 条回复
haoz1w0w
127 天前
单体服务直接用事务不就行了
dzdh
127 天前
抽个中间逻辑层 负责混合调用两个
Akitora
127 天前
再加一层
gosky
127 天前
@dzdh
@Akitora
加一层,等于整个单体服务的结构加了一个维度
而这类情况只是属于少数

我想到另一种可能,加一个和商品模块、订单模块平级的 商品订单混合模块,由商品订单混合模块去调平级的两个模块。只是还从没这么干过……
nothingistrue
127 天前
把你的微服务怎么实现最终一致性的,搞清楚就可以了,没必要往外面找。「微服务」、「单体当中严格分离的模块」,这俩概念,在设计层面上,本来就是同一个。
dzdh
127 天前
@gosky

商品管理

product.add / remove / update

订单管理

order.new / update / query

下单逻辑层 (同级)

orderlogic.neworder : order.new(product.id, num,price) product.update(stock-1)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1057931

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX