
比如,下单后,前端重新调用请求获取购物车数量,但购物车数量是通过 mq 减少的,这个时候获取的数据不对,这种要怎么处理呢
1 atalia 2021-06-28 15:34:27 +08:00 加入一个 version,前端轮询判断 version |
2 funbox 2021-06-28 15:57:22 +08:00 实时性要求那么高 为啥用异步。。。 要取舍 |
3 WillingXyz OP @atalia 具体怎么加呢 |
4 thet 2021-06-28 16:19:26 +08:00 via iPhone 看 mq 平均消费时间是多少,可以通过一些障眼法等差不多时间再返回购物车页面,或者就不返回到购物车页面 |
5 zhaorunze 2021-06-28 17:28:31 +08:00 mq 本来就是异步,想要同步的效果就改成同步。 如果不想换 api,可以看看 mq 是否可以查询消息的消费状态,查询到被消费后,第一个接口才返回。等于强行把异步该改为同步。 |
6 lasuar 2021-06-28 17:38:53 +08:00 购物车商品数量更新本身应该是同步,其他操作改异步 |
7 hejw19970413 2021-06-28 20:31:03 +08:00 双十一淘宝也不可能做到实时同步啊。所以还得看你们业务接受的延迟和业务场景。不推荐改成同步方式。你可以进行一个粗略的数字这个数字可以做成热点缓存的方式,等到用户在下单动作时进行业务事务的处理。 |
8 akira 2021-06-28 20:37:50 +08:00 接口返回后等一会再查询 |
9 sujin190 2021-06-28 23:01:39 +08:00 对于这种异步任务接口偶尔调用需要返回的,我们都是通过分布式 Event,异步任务加一个 event_id 的参数,传了这个参数,mq 异步任务处理完了如果传了 event_id 的话激活这个分布式 Event 就行,接口这边简单的等待这个分布式 Event 激活就行,这样一个 mq 的异步任务就可以既单纯一个异步任务,也可以支持接口调用了,解耦了 不过估计很多都用过分布式锁,但是估计都没用过分布式 Event 吧,或者用 redis 的 pubsub 回传结果其实也行的吧 |
10 potatowish 2021-06-29 07:54:32 +08:00 via iPhone 流程要进行拆分,购物车数量减少明显是应该做成同步的,消息异步处理更适合状态类或者前台感知不到的业务 |
11 wowbaby 2021-06-29 09:10:31 +08:00 购物车应该是同步操作吧,或者是 MQ 成功后,作标记已入 MQ 的数据,购物车返回的数据再过滤掉作标记的数据, |
12 NUT 2021-06-29 09:36:39 +08:00 @atalia #1 握手,就这么弄。把结果放到 redis 里面。mq 投递前给生成一个 id,然后前端拿着这个 ID 轮训。 HTTP 轮训的方案其实是最实用的。还有有些大哥说同步改造,看到这个有点崩溃。 如果同步返回,在海量秒杀情况下,就连接数就可以来一壶。 |
13 106npo 2021-06-29 09:45:12 +08:00 via Android 淘宝的购物车数量就没正确显示过,你看有用户去找客服说这事么 |
14 Zien 2021-06-29 11:17:36 +08:00 via iPhone 话说美团和淘宝的优惠计算不同步是什么情况 |
15 heheda11 2021-06-29 11:25:15 +08:00 在 mq 队列中的商品加状态 |
16 hhjswf 2021-06-29 11:41:42 +08:00 这个有点离谱吧,你下单完会立马去购物车看一眼吗?就算回,不同步也无关紧要啊 |
17 bsg1992 2021-06-29 17:34:32 +08:00 扣减做成异步,本身就无法实时同步,肯定会有数据对不上的情况。当你选择异步处理业务的时候肯定做做取舍。 一般这种情况,前端请求服务后直接做加减,障眼法。 要不就是轮询,等待异步业务处理完成 |