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