跳转到结算页,获取订单确认页需要的数据时,出现以下3种问题:
1.Feign远程调用丢失请求头的问题:
order模块里调用了member、cart模块,但是本地cookie里没有数据,请求头中没有携带Cookie,就会被认为没登录
解决:
写一个filter,把原来的请求头给当前的新请求加上
2.Feign异步丢失上下文问题:
因为使用的是ThreadLocal传递数据,但是ThreadLocal的数据统一只能在同一个线程下,而异步情况是开了几个不同的线程,此时ThreadLocal就无法同步数据了
解决:为每一个新开的线程赋值原先的数据
3.下单操作的幂等性:
insert和update不是幂等,select和delete是天然幂等。但insert在加入了主键时,是幂等的;update如果是以下形式就是幂等的,因为没有改变状态:update t set c=1 where p=2。而update set c=c+1 where p=2就不是幂等的
解决幂等性:
使用token令牌。1.获取令牌 2.对比令牌 3.删除令牌 三个操作要是原子性的
获取订单确认页数据时就生成一个token存入redis中
在下单方法中要先从redis中获取到令牌token进行比较:
获取结算页的全流程: