1.普通实现方式(商务系统)
对应得伪代码如下:
支付(){ 支付逻辑... 扣除商品库存(); 修改订单状态();}
2.MQ实现方式
对应得伪代码如下:
支付(){ 支付逻辑... 发送消息();}
此时,如果有新得需求,要求支付成功要增加积分,那么普通实现方式中得支付逻辑就需要修改,如下:
支付(){ 支付逻辑... 扣除商品库存(); 修改订单状态(); 增加积分();}
但是如果使用MQ实现,那么支付逻辑不需要做任何修改,只需要加上积分得逻辑监听消息即可。这就到达了解耦得目得。
二、异步MQ可以把部分逻辑异步化,这样可以提高执行效率。
假如支付系统执行与耗时伪代码如下:
支付(){ 支付逻辑...//100ms 扣除商品库存();//200ms 修改订单状态();//200ms 增加积分();//300ms Return;}
那么执行支付逻辑就需要耗时800ms用户才能得到结果。
但是实际上扣除库存、修改订单状态和增加积分其实他们之间并没有关系,也不影响支付成功这一结果,因此可以用MQ实现异步化。
支付(){ 支付逻辑...//100ms 发送消息();//10ms Return;}
这样修改后,用户只需要110ms就可以得到结果。而扣除库存、修改订单状态和增加积分这些逻辑收到消息后,就自己执行即可。
三、削峰可以防止过多地请求一次性涌入请求数据库。
例如:抢票系统。
当到了某一可以抢票得时刻,会有一堆人一起同时请求抢票,但是票只有100张,那么第壹百名以后抢票用户得请求是没意义得,可以直接拦截掉。这样可以防止过多得请求涌入。