休息![]() |

| LZ你好,活动需要分享自己的游戏或者生活动态,类似于朋友圈,这样复制粘贴PPT知识点是不行的哦~ |
|
.清理订单 学完了各种延迟队列的实现,不知道大家最喜欢哪一种? 本例中我们会选择RabbitMQ来作为延迟队列,综合起来比较有优势。 3.1.业务分析 首先,我们需要在项目中声明队列和交换机,与上面demo类似: 两个交换机:
两个队列:
来看下业务流程: 首先修改下单业务:
然后一个独立的消费者,需要监听ly.evict.order.queue这个队列,业务:
|
自习一天.......肝不动了![]() |
学习目标
1.业务需求 之前我们讨论过扣减库存的问题,下单减库存和支付减库存各自有一定的优势和缺陷,我们选择了下单减库存的方案。 订单创建之后,就会扣减库存,并且生成了支付的二维码,但是如果用户一直不支付,就会导致商品库存被占用,而不能形成有效交易,会损害商家的利益,流失真正的具有购买意向的客户。 因此,如果有客户下单超过一定的时间没有付款,我们必须关闭订单,释放库存。 那么问题来了,我们如何得知哪些订单时超时未支付的订单呢? 订单下单后,需要等待一段时间后再判断是否支付,到底是关闭还是继续。这样的延时执行的业务,称为延时任务。 2.延迟队列 与延时关闭订单这样的业务类似,还有很多需要延时执行的任务,例如:
而解决这一类延时任务问题,一般都会通过延迟队列来解决 2.1.什么是延迟队列延迟队列,首先是队列,例如我们学习的MQ,是消息队列,也就是一个存放消息的容器。延迟队列就是延迟消费的消息队列。队列中存储的是延时消息,所谓“延时消息”是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费,(延迟送达)。 延迟队列不仅仅要实现消息的延迟消费,最好还要满足下面的几点要求:
|
加油 |
|
day14_分布式事务 0.学习目标
1.什么是分布式事务 我们已经完成了下单的业务,但是下单业务中会包含多个微服务的调用,例如:
要了解分布式事务,必须先了解本地事务。 1.1.本地事务事务,是指传统的单机数据库事务,必须具备ACID原则:
所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。
事务的执行必须保证系统的一致性,就拿转账为例,A有500元,B有500元,如果在一个事务里A成功转给B50元,那么不管发生什么,那么最后A账户和B账户的数据之和必须是1000元。
所谓的隔离性就是说,事务与事务之间不会互相影响,一个事务的中间状态不会被其他事务感知。
所谓的持久性,就是说一单事务完成了,那么事务对数据所做的变更就完全保存在了数据库中,即使发生停电,系统宕机也是如此。 因为在传统项目中,项目部署基本是单点式:即单个服务器和单个数据库。这种情况下,数据库本身的事务机制就能保证ACID的原则,这样的事务就是本地事务。 概括来讲,单个服务与单个数据库的架构中,产生的事务都是本地事务。 1.2.分布式事务分布式事务,就是指不是在单个服务或单个数据库架构下,产生的事务:
|
休息日 怎么睡到快11点了还困 |
学习目标
1.订单数据结构 加入购物车后,自然就要完成用户下单,订单属于对事务要求较高的业务,肯定不能写入MongoDB,应该写入MySQL数据库中。 |
取错了名 发表于 2021-9-5 09:03 贴了给谁看啊 |
| 别光学习不练 上几段代码 |
0.学习目标
1.购物车功能分析1.1.需求 需求描述:
1.2.业务分析 在需求描述中,不管用户是否登录,都需要实现加入购物车功能,那么已登录和未登录下,购物车数据应该存放在哪里呢?
用户如果未登录,将数据保存在服务端存在一些问题:
那么我们应该用把数据保存在客户端(浏览器),这样每个用户保存自己的数据,就不存在身份识别的问题了,而且也解决了服务端数据存储压力问题。
用户登录时,数据保存在哪里呢? 大家首先想到的应该是数据库,不过购物车数据比较特殊:
这样的数据存储数据库有些浪费。因此我们可以考虑存入NoSql库中,例如:Redis、Elasticsearch、MongoDB等。 这里我们采用MongoDB作为购物车存储方案。 |