1. 程式人生 > >Spring Boot與訊息 JMS、AMQP、RabbitMQ簡單概述

Spring Boot與訊息 JMS、AMQP、RabbitMQ簡單概述

一、概述


1. 大多應用中,可通過訊息服務中介軟體來提升系統非同步通訊、擴充套件解耦能力 2. 訊息服務中兩個重要概念: 訊息代理(message broker)和目的地(destination) 當訊息傳送者傳送訊息以後,將由訊息代理接管,訊息代理保證訊息傳遞到指定目 的地。 3. 訊息佇列主要有兩種形式的目的地 1. 佇列(queue):點對點訊息通訊(point-to-point) 2. 主題(topic):釋出(publish)/訂閱(subscribe)訊息通訊

 

4. 點對點式: – 訊息傳送者傳送訊息,訊息代理將其放入一個佇列中,訊息接收者從佇列中獲取訊息內容, 訊息讀取後被移出佇列 – 訊息只有唯一的傳送者和接受者,但並不是說只能有一個接收者
5. 釋出訂閱式: – 傳送者(釋出者)傳送訊息到主題,多個接收者(訂閱者)監聽(訂閱)這個主題,那麼 就會在訊息到達時同時收到訊息
6. JMS(Java Message Service)JAVA訊息服務: – 基於JVM訊息代理的規範。ActiveMQ、HornetMQ是JMS實現
7. AMQP(Advanced Message Queuing Protocol) – 高階訊息佇列協議,也是一個訊息代理的規範,相容JMS – RabbitMQ是AMQP的實現 

二者異同點:

JMS

AMQP

定義

Java api

網路線級協議

跨語言

跨平臺

Model

提供兩種訊息模型:

1)、Peer-2-Peer

(2)、Pub/sub

提供了五種訊息模型:

1)、direct exchange

(2)、fanout exchange

(3)、topic change

(4)、headers exchange

(5)、system exchange

本質來講,後四種和JMSpub/sub模型沒有太大差別,僅是在路由機制上做了更詳細的劃分;

支援訊息型別

多種訊息型別:

TextMessage

MapMessage

BytesMessage

StreamMessage

ObjectMessage

Message (只有訊息頭和屬性)

byte[]

當實際應用時,有複雜的訊息,可以將訊息序列化後傳送。

綜合評價

JMS 定義了JAVA API層面的標準;在java體系中,多個client均可以通過JMS進行互動,不需要應用修改程式碼,但是其對跨平臺的支援較差;

AMQP定義了wire-level層的協議標準;天然具有跨平臺、跨語言特性。

8.Spring支援

spring-jms提供了對JMS的支援

spring-rabbit提供了對AMQP的支援

需要ConnectionFactory的實現來連線訊息代理

提供JmsTemplateRabbitTemplate來發送訊息

@JmsListenerJMS)、@RabbitListenerAMQP)註解在方法上監聽訊息代理髮布的訊息

@EnableJms@EnableRabbit開啟支援

9.Spring Boot自動配置

JmsAutoConfiguration

RabbitAutoConfiguration