RabbitMQ 是一個由 Erlang 語言開發(fā)的 AMQP 的開源實現(xiàn)瞭吃。是 分布式系統(tǒng)中重要的組件嗜憔,主要解決應用耦合,異步消息便锨,流量削鋒等問題實現(xiàn)高性能围辙,高可用,可伸縮和最終一致性[架構] 使用較多的消息隊列有ActiveMQ放案,RabbitMQ姚建,ZeroMQ,Kafka吱殉,MetaMQ掸冤,RocketMQ
以下介紹消息隊列在實際應用中常用的使用場景:異步處理厘托,應用解耦,流量削鋒和消息通訊四個場景 稿湿。
主要概念:
RabbitMQ Server: 也叫broker server铅匹,它是一種傳輸服務。 他的角色就是維護一條從Producer到Consumer的路線饺藤,保證數(shù)據(jù)能夠按照指定的方式進行傳輸包斑。
Producer: 消息生產(chǎn)者,如圖A策精、B舰始、C,數(shù)據(jù)的發(fā)送方咽袜。消息生產(chǎn)者連接RabbitMQ服務器然后將消息投遞到Exchange丸卷。
Consumer:消息消費者,如圖1询刹、2谜嫉、3,數(shù)據(jù)的接收方凹联。消息消費者訂閱隊列沐兰,RabbitMQ將Queue中的消息發(fā)送到消息消費者。
Exchange:生產(chǎn)者將消息發(fā)送到Exchange(交換器)蔽挠,由Exchange將消息路由到一個或多個Queue中(或者丟棄)住闯。Exchange并不存儲消息。RabbitMQ中的Exchange有direct澳淑、fanout比原、topic、headers四種類型杠巡,每種類型對應不同的路由規(guī)則量窘。
Queue:(隊列)是RabbitMQ的內(nèi)部對象,用于存儲消息氢拥。消息消費者就是通過訂閱隊列來獲取消息的蚌铜,RabbitMQ中的消息都只能存儲在Queue中,生產(chǎn)者生產(chǎn)消息并最終投遞到Queue中嫩海,消費者可以從Queue中獲取消息并消費冬殃。多個消費者可以訂閱同一個Queue,這時Queue中的消息會被平均分攤給多個消費者進行處理叁怪,而不是每個消費者都收到所有的消息并處理造壮。
RoutingKey:生產(chǎn)者在將消息發(fā)送給Exchange的時候,一般會指定一個routing key骂束,來指定這個消息的路由規(guī)則耳璧,而這個routing key需要與Exchange Type及binding key聯(lián)合使用才能最終生效。在Exchange Type與binding key固定的情況下(在正常使用時一般這些內(nèi)容都是固定配置好的)展箱,我們的生產(chǎn)者就可以在發(fā)送消息給Exchange時旨枯,通過指定routing key來決定消息流向哪里。RabbitMQ為routing key設定的長度限制為255bytes混驰。
Connection: (連接):Producer和Consumer都是通過TCP連接到RabbitMQ Server的攀隔。以后我們可以看到,程序的起始處就是建立這個TCP連接栖榨。
Channels: (信道):它建立在上述的TCP連接中昆汹。數(shù)據(jù)流動都是在Channel中進行的。也就是說婴栽,一般情況是程序起始建立TCP連接满粗,第二步就是建立這個Channel。
VirtualHost:權限控制的基本單位愚争,一個VirtualHost里面有若干Exchange和MessageQueue映皆,以及指定被哪些user使用