消息中間件最全詳解(萬字圖文總結(jié))
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
消息中間件在分布式以及高并發(fā)架構(gòu)都是重要的內(nèi)容,下面我就重點(diǎn)來詳解消息中間件@mikechen 消息中間件定義消息中間件(Message Middleware)是一種用于構(gòu)建分布式系統(tǒng)的軟件基礎(chǔ)設(shè)施,它提供了一種異步、可靠、可伸縮的消息傳遞機(jī)制。
消息中間件應(yīng)用場(chǎng)景消息中間件的作用,主要包含如下4種: 1.異步通信 通過消息中間件,不同的服務(wù)之間可以進(jìn)行異步通信,可以提高系統(tǒng)的吞吐量和并發(fā)性能,避免因?yàn)橥秸{(diào)用而導(dǎo)致的阻塞和性能瓶頸。
2應(yīng)用解耦 消息中間件可以將消息發(fā)送方和接收方解耦,使得它們可以獨(dú)立地進(jìn)行開發(fā)和部署,不需要直接依賴于對(duì)方的實(shí)現(xiàn)細(xì)節(jié)。
3.流量控制 消息中間件可以設(shè)置流量控制,當(dāng)消息流量過大時(shí),可以暫停消息的發(fā)送,等到流量下降時(shí)再繼續(xù)發(fā)送,從而平滑地處理流量峰值。
4.日志處理 消息中間件需要對(duì)關(guān)鍵信息進(jìn)行日志記錄和處理,以便于監(jiān)控和追蹤系統(tǒng)運(yùn)行情況,發(fā)現(xiàn)潛在問題,優(yōu)化系統(tǒng)性能。
消息中間件原理消息中間件通常由生產(chǎn)者(Producer)、消息隊(duì)列(Message Queue)、消費(fèi)者(Consumer)三部分組成。 如下圖所示: 上圖為整體架構(gòu)會(huì)涉及三類角色:
消息中間件提供多種消息傳遞模式如點(diǎn)對(duì)點(diǎn)模式和發(fā)布/訂閱模式等。 1.點(diǎn)對(duì)點(diǎn)模型 在點(diǎn)對(duì)點(diǎn)模式中,生產(chǎn)者將消息發(fā)送到一個(gè)特定的消息隊(duì)列中,消息隊(duì)列只會(huì)將消息傳遞給一個(gè)消費(fèi)者進(jìn)行處理。 也就是說,一個(gè)消息只能被一個(gè)消費(fèi)者處理,這種模式也稱為隊(duì)列模式(Queue Mode)。 如下圖所示: 在點(diǎn)對(duì)點(diǎn)模式中,消息的生產(chǎn)者和消費(fèi)者之間是一對(duì)一的關(guān)系,這種模式可以實(shí)現(xiàn)簡(jiǎn)單的異步通信和任務(wù)分配,適用于需要處理一些不需要廣播的任務(wù),如任務(wù)調(diào)度、訂單處理等。
2.訂閱發(fā)布模式 在訂閱發(fā)布模式中,生產(chǎn)者將消息發(fā)布到一個(gè)主題(Topic)中,消費(fèi)者可以訂閱該主題并接收其中的消息。 在這種模式中,消息隊(duì)列會(huì)將消息廣播給所有訂閱了該主題的消費(fèi)者,也就是說,一個(gè)消息可以被多個(gè)消費(fèi)者同時(shí)處理。這種模式也稱為主題模式(Topic Mode)。 如下圖所示:
消息中間件有哪些下面是一些常見的消息中間件: 1.Apache Kafka Kafka是一個(gè)分布式的高吞吐量的消息系統(tǒng),最初由LinkedIn開發(fā),現(xiàn)在是Apache軟件基金會(huì)的頂級(jí)開源項(xiàng)目之一。 Kafka廣泛應(yīng)用于多種用例,例如實(shí)時(shí)數(shù)據(jù)流處理、日志聚合、監(jiān)控、指標(biāo)和日志收集、消息隊(duì)列等。 Kafka的基本模型是生產(chǎn)者向主題(Topic)發(fā)布消息,消費(fèi)者從主題訂閱消息。 消息通過一個(gè)或多個(gè)Kafka集群的代理(Broker)進(jìn)行傳輸和存儲(chǔ),如下圖所示:
2.RabbitMQ 一個(gè)開源的 AMQP(高級(jí)消息隊(duì)列協(xié)議)消息代理軟件,支持多種消息協(xié)議和多種語言的客戶端,并提供可靠性、靈活性和可擴(kuò)展性等優(yōu)勢(shì)。 RabbitMQ是erlang語言開發(fā),結(jié)合erlang語言本身的并發(fā)優(yōu)勢(shì),RabbitMQ支持許多高級(jí)特性,例如消息確認(rèn)、持久化、優(yōu)先級(jí)、消息 TTL、消息復(fù)制和分片等。
3.ActiveMQ 一個(gè)完全基于 JMS(Java 消息服務(wù))規(guī)范的消息中間件,支持多種消息協(xié)議和多種客戶端語言,并提供高可用、可靠性、事務(wù)性等特性。
4.RocketMQ RocketMQ是一個(gè)分布式的消息隊(duì)列系統(tǒng),由阿里巴巴集團(tuán)開發(fā)并開源。 它具有高可用性、高吞吐量、高可靠性和可擴(kuò)展性等特點(diǎn),并且支持多種消息傳遞模式,例如發(fā)布/訂閱、點(diǎn)對(duì)點(diǎn)等。 RocketMQ架構(gòu),如下圖所示: RocketMQ架構(gòu):主要由NameServer、Broker、Producer以及Consumer四部分構(gòu)成。 關(guān)于RocketMQ架構(gòu)原理,更加詳細(xì)的內(nèi)容請(qǐng)查看:RocketMQ架構(gòu)原理詳解(4大工作原理設(shè)計(jì)圖解)
5.Pulsar Pulsar是 Apache 軟件基金會(huì)頂級(jí)項(xiàng)目,是下一代云原生分布式消息流平臺(tái)。 Pulsar被看作是云原生時(shí)代實(shí)時(shí)消息流傳輸、存儲(chǔ)和計(jì)算最佳解決方案,其整體架構(gòu)圖如下所示:
6.Redis 消息隊(duì)列 Redis除了可以用作分布式緩存,也可以用于消息隊(duì)列的使用,支持多種消息協(xié)議和多種語言的客戶端。 不同的消息中間件在設(shè)計(jì)思想、功能特性、適用場(chǎng)景等方面都有所差異,需要根據(jù)具體的需求和場(chǎng)景選擇合適的消息中間件。
消息中間件選型總的來說:
以上就是消息中間件詳解,希望對(duì)你掌握消息中間件有所幫助。 -end- 該文章在 2024/1/23 12:30:36 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |