怎樣做到節(jié)能減排 如何做到節(jié)能減排
2024-07-02
更新時間:2024-07-02 18:03:55作者:佚名
MQ全稱為Message Queue,消息隊列是應(yīng)用程序和應(yīng)用程序之間的通信方法。
為什么使用MQ?
在項目中,可將一些無需即時返回且耗時的操作提取出來,進行異步處理,而這種異步處理的方式大大的節(jié)省了服務(wù)器的請求響應(yīng)時間,從而提高了系統(tǒng)的吞吐量
將不需要同步處理的并且耗時長的操作由消息隊列通知消息接收方進行異步處理。提高了應(yīng)用程序的響應(yīng)時間。
MQ相當于一個中介,通過它讓生產(chǎn)者與消費者交互,將應(yīng)用程序進行解耦合。
如某個系統(tǒng)會往數(shù)據(jù)庫寫數(shù)據(jù),但是數(shù)據(jù)庫只能支撐每秒1000左右的并發(fā)寫入,并發(fā)量再高就容易宕機。
在系統(tǒng)低峰期的時候并發(fā)也就100多個,但在高峰期時候,并發(fā)量會突然激增到5000以上,這個時候數(shù)據(jù)庫肯定會卡死。
這時候,可以使用MQ,消息會被MQ保存起來,然后系統(tǒng)就可以按照自己的消費能力來消費,比如每秒1000個數(shù)據(jù),慢慢寫入數(shù)據(jù)庫,就不會卡死數(shù)據(jù)庫了。
但使用了MQ之后,限制消費消息的速度為1000,但是這樣一來,高峰期產(chǎn)生的數(shù)據(jù)勢必會被積壓在MQ中,高峰就被“削”掉了。
但是因為消息積壓,在高峰期過后的一段時間內(nèi),消費消息的速度還是會維持在1000QPS,直到消費完積壓的消息,這就叫做**“填谷”**
MQ是消息通信的模型;實現(xiàn)MQ的大致有兩種主流方式:AMQP、JMS。
AMQP 是一種協(xié)議,更準確地說是一種 binary wire-level protocol(鏈接協(xié)議)。與 JMS 的本質(zhì)差別 : AMQP不從API層進行限定,而是直接定義網(wǎng)絡(luò)交換的數(shù)據(jù)格式。
JMS 即Java消息服務(wù)(JavaMessage Service)應(yīng)用程序接口,是一個Java平臺中關(guān)于面向消息中間件(MOM)的API,用于在兩個應(yīng)用程序之間,或分布式系統(tǒng)中發(fā)送消息,進行異步通信。
常見的消息隊列有如下:
ActiveMQ:基于 JMSZeroMQ:基于 C 語言開發(fā)RabbitMQ:基于 AMQP 協(xié)議,erlang 語言開發(fā),穩(wěn)定性好RocketMQ:基于 JMS,阿里巴巴產(chǎn)品Kafka:類似MQ的產(chǎn)品;分布式消息系統(tǒng),高吞吐量RabbitMQ是由erlang語言開發(fā),基于AMQP(Advanced Message Queue 高級消息隊列協(xié)議)協(xié)議實現(xiàn)的消息隊列,它是一種應(yīng)用程序之間的通信方法,消息隊列在分布式系統(tǒng)開發(fā)中應(yīng)用非常廣泛。
RabbitMQ官方地址:http://www.rabbitmq.com/
RabbitMQ提供了6種模式:
簡單模式
work模式
Publish/Subscribe 發(fā)布與訂閱模式
Routing 路由模式
Topics 主題模式
RPC 遠程調(diào)用模式;
官網(wǎng)對應(yīng)模式介紹:https://www.rabbitmq.com/getstarted.html
來源:
https://www.cnblogs.com/MoYu-zc/p/15144660.html