作用:提升系統異步通信,擴展解耦能力。
系統發送消息到消息代理接管,消息代理保證消息傳送到指定目的地。
主要的兩種形式:
1.隊列(Queue):點對點通信
每一條消息只有一個接收者獲取,當某條消息被一個接收者獲取后,該消息將被移出隊列,其余接收者無法獲取該消息。
2.發布(Publish)/ 訂閱(Subscribe)
多個接收者監聽(訂閱)了這個隊列,隊列中的新消息將到達每一個接收者,訂閱了這個隊列的接收者將同時收到消息。
JMS(Java消息服務) | AMQP(高級消息隊列協議) | |
定義 | Java API | 網絡線級協議 |
跨語言 | 否 | 是 |
跨平台 | 否 | 是 |
消息模型 | 1.點對點 2.發布/訂閱 |
1.direct exchange(點對點) 2.fanout exchange(發布/訂閱) 3.topic exchange(發布/訂閱) 4.headers exchange(發布/訂閱) 5.system exchange(發布/訂閱) 本質上講,后四種都屬於發布/訂閱,僅在 路由機制上作了更加詳細的區分 |
支持消息類型 | 1.TextMessage 2.MapMessage 3.BytesMessage 4.StreamMessage 5.ObjectMessage 6.Message(只有消息頭和屬性) |
byte[] 當實際應用時,有復雜的消息可以將消息序列化 后發送。 |
綜合評價 | JMS定義了Java API層面的標准,在Java 體系中,多個Client均可以通過JMS進行 交互,不需要應用修改代碼,但其對跨平台 的支持較差 |
AMQP定義了wire-level層的協議標准,天然具有跨語言、 跨平台的特性。 |
Sping的支持
Spring-jms提供了對JMS的支持 |
Spring-rabbit提供了對AMQP的支持 |
需要ConnectionFactory的實現類來連接消息代理 |
提供JmsTemplate、RabbitTemplate來發送消息 |
@JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上監聽消息代理發布的消息 |
@EnableJms、@EnableRabbit開啟支持 |
SpringBoot的支持
starter(啟動器) | AutoConfiguration(自動配置類) | |
JMS | spring-boot-starter-activemq spring-boot-starter-artemis |
JmsAutoConfiguration |
AMQP | spring-boot-starter-amqp | RabbitAutoConfiguration |