19.下单服务(Feign远程调用、异步丢失请求头,幂等性)

跳转到结算页,获取订单确认页需要的数据时,出现以下3种问题:

1.Feign远程调用丢失请求头的问题:

order模块里调用了member、cart模块,但是本地cookie里没有数据,请求头中没有携带Cookie,就会被认为没登录

19.下单服务(Feign远程调用、异步丢失请求头,幂等性)

解决:

写一个filter,把原来的请求头给当前的新请求加上

19.下单服务(Feign远程调用、异步丢失请求头,幂等性)

 

2.Feign异步丢失上下文问题:

因为使用的是ThreadLocal传递数据,但是ThreadLocal的数据统一只能在同一个线程下,而异步情况是开了几个不同的线程,此时ThreadLocal就无法同步数据了

19.下单服务(Feign远程调用、异步丢失请求头,幂等性)

解决:为每一个新开的线程赋值原先的数据

19.下单服务(Feign远程调用、异步丢失请求头,幂等性)

 

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.删除令牌 三个操作要是原子性的

19.下单服务(Feign远程调用、异步丢失请求头,幂等性)

19.下单服务(Feign远程调用、异步丢失请求头,幂等性)

获取订单确认页数据时就生成一个token存入redis中

19.下单服务(Feign远程调用、异步丢失请求头,幂等性)

在下单方法中要先从redis中获取到令牌token进行比较:

19.下单服务(Feign远程调用、异步丢失请求头,幂等性)

 

获取结算页的全流程:

19.下单服务(Feign远程调用、异步丢失请求头,幂等性)

上一篇:Spring Cloud + Feign实现微服务负载路由


下一篇:深度学习100例-卷积神经网络(VGG-16)识别海贼王草帽一伙 | 第6天