首先声明,由于 Dubbo 目前一直在不断迭代更新中,尤其对于一些比较老的版本实现方式可能完全是不一样的,就算新的版本之间也有一些细微的差别,而我下面的源码分析用的是 Dubbo 官方的消费端发起请求调用服务端接口的一个例子来进行源码分析,而且是基于 Dubbo 3.2.0-beta.4 的版本。
服务端定义和实现
这里用的是 Dubbo 官方最简单的一个 dubbo 接口请求的例子,服务端接口定义如下:
延迟队列或许大家都听过,可能也用过,一种比较常见的应用场景就是用户下单后,超过 10 分钟未支付将用户订单取消,这种其实就可以通过延迟队列来实现,这里先不考虑订单数量特别大的情况。大概流程就是用户下单后,订单服务创建订单保存后同时将这笔订单信息放入延迟队列中,设置延迟时间为 10 分钟,10 分钟后从队列中取出来判断支付状态,未支付则将这笔订单取消。
上篇文章中从整体上介绍了 explain 的使用以及 explain 执行得到的这些字段含义和常见的值,那得到这些字段信息后,对于这个 SQL 要不要优化,又该怎么优化,这个似乎没有什么固定的标准,但总体来说的话,要尽量让我们的查询使用上索引,然后在使用上索引之后再进一步看有没有优化的空间,当然对于实在没法用上索引或者说业务上能接受没必要多建一个索引的查询,我们也可以尝试在用不上索引的情况下去看看还有没有进一步优化的空间。
对于 MySQL 事务,可能我们大家都不陌生,事务是对数据库中数据操作保证数据逻辑一致的最小操作单位,一个事务中可能包含多条语句,但这些语句作为一个整体,由事务来保证这个整体的操作要么都成功,要么都失败,不存在部分成功部分失败的情况。