10

部分业务通过 MQ 异步处理,但接口返回后就立刻查询,这种情况怎么处理?

 3 years ago
source link: https://www.v2ex.com/t/786254
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

部分业务通过 MQ 异步处理,但接口返回后就立刻查询,这种情况怎么处理?

  WillingXyz · 17 小时 16 分钟前 · 967 次点击

比如,下单后,前端重新调用请求获取购物车数量,但购物车数量是通过 mq 减少的,这个时候获取的数据不对,这种要怎么处理呢

  1. 改成同步:但如果有很多相关业务,不能都改成同步吧
  2. 前端轮询查询:还是有一段时间显示的数据不对
10 条回复    2021-06-29 07:54:32 +08:00

atalia

atalia   17 小时 13 分钟前

加入一个 version,前端轮询判断 version

funbox

funbox   16 小时 50 分钟前

实时性要求那么高 为啥用异步。。。 要取舍

WillingXyz

WillingXyz   16 小时 48 分钟前

@atalia 具体怎么加呢

thet

thet   16 小时 28 分钟前 via iPhone

看 mq 平均消费时间是多少,可以通过一些障眼法等差不多时间再返回购物车页面,或者就不返回到购物车页面

zhaorunze

zhaorunze   15 小时 19 分钟前

mq 本来就是异步,想要同步的效果就改成同步。
如果不想换 api,可以看看 mq 是否可以查询消息的消费状态,查询到被消费后,第一个接口才返回。等于强行把异步该改为同步。

lasuar

lasuar   15 小时 8 分钟前

购物车商品数量更新本身应该是同步,其他操作改异步

hejw19970413

hejw19970413   12 小时 16 分钟前

双十一淘宝也不可能做到实时同步啊。所以还得看你们业务接受的延迟和业务场景。不推荐改成同步方式。你可以进行一个粗略的数字这个数字可以做成热点缓存的方式,等到用户在下单动作时进行业务事务的处理。

akira

akira   12 小时 9 分钟前

接口返回后等一会再查询

sujin190

sujin190   9 小时 46 分钟前

对于这种异步任务接口偶尔调用需要返回的,我们都是通过分布式 Event,异步任务加一个 event_id 的参数,传了这个参数,mq 异步任务处理完了如果传了 event_id 的话激活这个分布式 Event 就行,接口这边简单的等待这个分布式 Event 激活就行,这样一个 mq 的异步任务就可以既单纯一个异步任务,也可以支持接口调用了,解耦了

不过估计很多都用过分布式锁,但是估计都没用过分布式 Event 吧,或者用 redis 的 pubsub 回传结果其实也行的吧

potatowish

potatowish   53 分钟前 via iPhone

流程要进行拆分,购物车数量减少明显是应该做成同步的,消息异步处理更适合状态类或者前台感知不到的业务

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK