MQ優(yōu)勢(shì):
應(yīng)用解耦:提高系統(tǒng)容錯(cuò)性和可維護(hù)性
異步提速:提升用戶體驗(yàn)和系統(tǒng)吞吐量
削峰填谷:提高系統(tǒng)穩(wěn)定性
劣勢(shì)
使用條件
①生產(chǎn)者不需要從消費(fèi)者處獲得反饋胡岔。引入消息隊(duì)列之前的直接調(diào)用,其接口的返回值應(yīng)該為空,這才讓明明下層的動(dòng)作還沒做迫筑,上層卻當(dāng)成動(dòng)作做完了繼續(xù)往后走村刨,即所謂異步成為了可能十减。
②容許短暫的不一致性栈幸。
③確實(shí)是用了有效果。即解耦帮辟、提速速址、削峰這些方面的收益,超過加入MQ由驹,管理MQ這些成本芍锚。
概念
Broker:接收和分發(fā)消息的應(yīng)用,RabbitMQ Server就是 Message Broker蔓榄。
Virtual host:出于多租戶和安全因素設(shè)計(jì)的并炮,把 AMQP 的基本組件劃分到一個(gè)虛擬的分組中,類似于網(wǎng)絡(luò)中的 namespace 概念甥郑。當(dāng)多個(gè)不同的用戶使用同一個(gè) RabbitMQ server 提供的服務(wù)時(shí)渣触,可以劃分出多個(gè)vhost,每個(gè)用戶在自己的 vhost 創(chuàng)建 exchange/queue 等壹若。
Connection:publisher/consumer 和 broker 之間的 TCP 連接。
Channel:如果每一次訪問 RabbitMQ 都建立一個(gè) Connection皂冰,在消息量大的時(shí)候建立 TCP Connection的開銷將是巨大的店展,效率也較低。Channel 是在 connection 內(nèi)部建立的邏輯連接秃流,如果應(yīng)用程序支持多線程赂蕴,通常每個(gè)thread創(chuàng)建單獨(dú)的 channel 進(jìn)行通訊,AMQP method 包含了channel id 幫助客戶端和message broker 識(shí)別 channel舶胀,所以 channel 之間是完全隔離的概说。Channel 作為輕量級(jí)的 Connection 極大減少了操作系統(tǒng)建立 TCP connection 的開銷碧注。
Exchange:message 到達(dá) broker 的第一站,根據(jù)分發(fā)規(guī)則糖赔,匹配查詢表中的 routing key萍丐,分發(fā)消息到queue 中去。常用的類型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)放典。
Queue:消息最終被送到這里等待 consumer 取走逝变。
Binding:exchange 和 queue 之間的虛擬連接,binding 中可以包含 routing key奋构。Binding 信息被保存到 exchange 中的查詢表中壳影,用于 message 的分發(fā)依據(jù)。
簡(jiǎn)介
RabbitMQ 提供了 6 種工作模式:簡(jiǎn)單模式弥臼、work queues宴咧、Publish/Subscribe 發(fā)布與訂閱模式、Routing 路由模式径缅、Topics 主題模式掺栅、RPC 遠(yuǎn)程調(diào)用模式。
官網(wǎng)對(duì)應(yīng)模式介紹:https://www.rabbitmq.com/getstarted.html
JMS
JMS 即 Java 消息服務(wù)(JavaMessage Service)應(yīng)用程序接口芥驳,是一個(gè) Java 平臺(tái)中關(guān)于面向消息中間件的API.
JMS 是 JavaEE 規(guī)范中的一種柿冲,類比JDBC.
很多消息中間件都實(shí)現(xiàn)了JMS規(guī)范,例如:ActiveMQ兆旬。RabbitMQ 官方?jīng)]有提供 JMS 的實(shí)現(xiàn)包假抄,但是開源社區(qū)有.