概念
大多應(yīng)用中,可通過(guò)消息服務(wù)中間件來(lái)提升系統(tǒng)異步通信俱笛、擴(kuò)展解耦能力
消息服務(wù)中兩個(gè)重要概念:
消息代理(message broker)和目的地(destination)
當(dāng)消息發(fā)送者發(fā)送消息以后,將由消息代理接管传趾,消息代理保證消息傳遞到指定目的地迎膜。
- 消息隊(duì)列主要有兩種形式的目的地
隊(duì)列(queue):點(diǎn)對(duì)點(diǎn)消息通信(point-to-point)
主題(topic):發(fā)布(publish)/訂閱(subscribe)消息通信
- 點(diǎn)對(duì)點(diǎn)式
消息發(fā)送者發(fā)送消息,消息代理將其放入一個(gè)隊(duì)列中浆兰,消息接收者從隊(duì)列中獲取消息內(nèi)容磕仅,消息讀取后被移出隊(duì)列
消息只有唯一的發(fā)送者和接受者,但并不是說(shuō)只能有一個(gè)接收者
- 發(fā)布訂閱式
發(fā)送者(發(fā)布者)發(fā)送消息到主題簸呈,多個(gè)接收者(訂閱者)監(jiān)聽(tīng)(訂閱)這個(gè)主題榕订,那么就會(huì)在消息到達(dá)時(shí)同時(shí)收到消息
- JMS(Java Message Service)JAVA消息服務(wù)
基于JVM消息代理的規(guī)范。ActiveMQ蜕便、HornetMQ是JMS實(shí)現(xiàn)
- AMQP(Advanced Message Queuing Protocol)
高級(jí)消息隊(duì)列協(xié)議劫恒,也是一個(gè)消息代理的規(guī)范,兼容JMS
RabbitMQ是AMQP的實(shí)現(xiàn)
JMS和AMQP區(qū)別
JMS | AMQP | |
---|---|---|
定義 | Java Api | 網(wǎng)絡(luò)線級(jí)協(xié)議 |
跨語(yǔ)言 | 否 | 是 |
跨平臺(tái) | 否 | 是 |
Model | 提供兩種消息模型 1. Peer-2-Peer 2.Pub/sub |
提供了五種消息模型: (1)轿腺、direct exchange (2)兼贸、fanout exchange (3)、topic change (4)吃溅、headers exchange (5)、system exchange 本質(zhì)來(lái)講鸯檬,后四種和JMS的pub/sub模型沒(méi)有太大差別决侈,僅是在路由機(jī)制上做了更詳細(xì)的劃分; |
支持消息類(lèi)型 | TextMessage喧务、 MapMessage赖歌、 BytesMessage、 StreamMessage功茴、 ObjectMessage庐冯、 Message (只有消息頭和屬性) | byte[] 當(dāng)實(shí)際應(yīng)用時(shí),有復(fù)雜的消息坎穿,可以將消息序列化后發(fā)送展父。 |
綜合評(píng)價(jià) | JMS 定義了JAVA API層面的標(biāo)準(zhǔn);在java體系中玲昧,多個(gè)client均可以通過(guò)JMS進(jìn)行交互栖茉,不需要應(yīng)用修改代碼,但是其對(duì)跨平臺(tái)的支持較差孵延; | AMQP定義了wire-level層的協(xié)議標(biāo)準(zhǔn)吕漂;天然具有跨平臺(tái)、跨語(yǔ)言特性尘应。 |