三個優點分別是:解耦、異步、削峰。
一、解耦
1.普通實現方式(商務系統)
對應的偽代碼如下:
支付(){
支付邏輯...
扣除商品庫存();
修改訂單狀態();
}
2.MQ實現方式
對應的偽代碼如下:
支付(){
支付邏輯...
發送消息();
}
此時,如果有新的需求,要求支付成功要增加積分,那么普通實現方式中的支付邏輯就需要修改,如下:
支付(){
支付邏輯...
扣除商品庫存();
修改訂單狀態();
增加積分();
}
但是如果使用MQ實現,那么支付邏輯不需要做任何修改,只需要加上積分的邏輯監聽消息即可。這就到達了解耦的目的。
二、異步
MQ可以把部分邏輯異步化,這樣可以提高執行效率。
假如支付系統執行與耗時偽代碼如下:
支付(){
支付邏輯...//100ms
扣除商品庫存();//200ms
修改訂單狀態();//200ms
增加積分();//300ms
Return;
}
那么執行支付邏輯就需要耗時800ms用戶才能得到結果。
但是實際上扣除庫存、修改訂單狀態和增加積分其實他們之間并沒有關系,也不影響支付成功這一結果,因此可以用MQ實現異步化。
支付(){
支付邏輯...//100ms
發送消息();//10ms
Return;
}
這樣修改后,用戶只需要110ms就可以得到結果。而扣除庫存、修改訂單狀態和增加積分這些邏輯收到消息后,就自己執行即可。
三、削峰
可以防止過多地請求一次性涌入請求數據庫。
例如:搶票系統。
當到了某一可以搶票的時刻,會有一堆人一起同時請求搶票,但是票只有100張,那么第一百名以后搶票用戶的請求是沒意義的,可以直接攔截掉。這樣可以防止過多的請求涌入。