Description or Example
# 知识点
## 需要将整个订单数据存储到消息队列吗?
> 完全没必要, 因为这样会浪费RabbitMQ的内存和磁盘存储空间, 同时, 网络传输量也会变大, 而且, 最终我们获取的只是里面的一个OrderSn, 其他都不需要, 因此完全没有必要, 只需要将必要的订单号存储到消息队列即可
## 取消订单存在的问题
> 取消的时候需要调用订单微服务, 因为订单微服务有登录拦截, 所以, 这个请求被拦截了, 返回了一个页面, 所以会出现这样的错误, 所以, 在拦截器取消拦截即可
## 取消订单存在的问题
> 如果我们取消订单, 我们需要首先将这个消息送到延迟队列, 但是在传输过程中, 可能遇到网络高峰或故障, 导致该订单取消消息被处理的时间比库存消息处理的时间长, 导致释放库存的时候无法释放一个将要被取消的订单的库存, 有极大的问题
> 详细来说, 是因为在解锁库存的时候, 发现对应的消息状态并不是已取消状态(新建状态), 因此无法解锁库存
![image.png](https://cos.easydoc.net/13568421/files/lmiyehou.png)
### 解决方式
> 为了避免因网络延迟造成消息的库存无法释放的问题, 我们可以在消息被取消后, 继续往队列里面发送消息, 不放在延迟队列, 通过这个消息让后台帮我们解锁库存, 完美解决了无法解锁库存的难题