RabbitMQ

2020-08-11 17:26:25

RabbitMQ

1.概念

簡稱MQ,基於佇列實現應用與應用間訊息通訊的軟體

2.MQ的應用場景

1.非同步處理
2.應用解耦
3.流量削峯
4.訊息通知

3.MQ常見的訊息協定

JMS java訊息服務
AMQP 高階訊息佇列協定
MQTT 物聯網常用訊息協定

4.訊息佇列中介軟體的相關產品

ActiveMQ:基於JMS協定 
RabbitMQ:基於AMQP協定,erlang語言
RocketMQ:基於JMS,阿裡巴巴產品
Kafka:分佈式訊息系統,高吞吐量

5.AMQP協定模型及相關概念

Message:要傳輸的數據訊息
Producer:訊息的生產者,通過用戶端發送數據到mq
Consumer:訊息的消費者,通過用戶端監聽佇列
Exchange:交換機
Queue:訊息的目的地,所有訊息最終都會存到佇列中
route_key:通過路由可以將佇列和交換機系結到一起
connection:連線物件
virtualHost:虛擬機器主機

6.可靠性訊息-訊息發送確認機制 機製

1.開啓確認機制 機製:channel.confirmSelect()
2.宣告發送確認監聽,channel.addConfirmListener();
3.提供return返回機制 機製,發送訊息將mandatory設定成true,訊息沒有投遞到佇列的話會返回channel.addReturnListener()

7.可靠性訊息-訊息的持久化機制 機製

MQ通過持久化機制 機製,保證MQ的訊息不丟失
Excahnge  Queue  Message 都可以設定持久化
Queue:宣告佇列時,設定Queue的持久化,durable true爲持久化,queueDeclare(String queue,boolean durable,boolean exclusive,boolean autoDelete,null)
Message:訊息本身也要設定持久化,需要在BasicProperties訊息屬性中,設定deliveryMode爲2,表達持久化

8.可靠性訊息-訊息的消費確認機制 機製

MQ提供兩種消費確認機制 機製
1.自動確認,autoAck爲true代表自動確認,basicConsume(String queue,boolean autoAck,String consumerTag,Consumer callback)
2.手動確認,autoAck爲false代表手動確認,需要在執行完訊息程式碼時,手動確認 channel.basicAck(long deliveryTag,boolean multiple)

9.rabbitMQ支援的訊息模式

4種交換器:
  1.Direct  直連交換器
  2.Fanout 分發交換器
  3.Topic 主題交換器
  4.Headers 頭資訊交換器(不學)
6種工作模式:
	1.simple 簡單模式(預設交換器)
	2.work工作佇列模式(預設交換器)
	3.發佈與訂閱模式(分發交換器)
	4.路由模式(直連交換器)
	5.萬用字元模式(主題交換器)
	6.RPC模式(不學習)