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