1. 程式人生 > >學習RabbitMQ簡單總結

學習RabbitMQ簡單總結

RabbitMQ Publisher Server(Broker) Consumer Connection是RabbitMQ的socket連線,它封裝了socket協議相關部分邏輯。 ConnectionFactory為Connection的製造工廠。

 Channel: 通道,多路複用連線中的一條獨立的雙向資料流通道。通道是建立在真實的TCP連線上的虛擬連線, AMQP 命令都是通過通道發出去的,不管是釋出訊息、訂閱佇列還是接收訊息,這些動作都是通過通道完成。 因為對於作業系統來說建立和銷燬 TCP 都是非常昂貴的開銷,所以引入了通道的概念,以複用一條 TCP 連線。  Message: 訊息,訊息由訊息頭和訊息體組成。訊息體是不透明的,而訊息頭則由一系列的可選屬性組成, 這些屬性包括routing-key(路由鍵)、priority(相對於其他訊息的優先權)、delivery-mode(指出該訊息 可能需要永續性儲存)等。 Virtual Host: 虛擬主機,表示一批交換器、訊息佇列和相關物件。用於進行邏輯隔離,最上層的訊息路由; 一個Virtual Host裡面可以有若干個Exchange和Queue,同一個Virtual Host裡面不能有相同名稱的Exchange或Queue Exchange:交換機 Queue:佇列 Binding:Exchange和Queue之間的虛擬連線,binding中可以包含routinng key routing key:一個路由規則 生產者傳送訊息時指定一個Exchange和路由key 一個Exchange可以繫結多個佇列

RabbitMQ整合SpringBoot: 引入相關依賴 對application.properties進行配置

Exchange Type 1 Direct 完全匹配,單播; 2 Topic 通過模式匹配分配訊息的路由鍵屬性 *匹配一個單詞 #匹配多個單詞 3 Fanout 每個發到fanout型別交換器的訊息都會分到所有繫結的佇列上去, fanout交換器不處理路由鍵,只是簡單的將佇列繫結到交換器上, 每個傳送到交換器的訊息都會被轉發到與該交換器繫結的所有佇列上. fanout傳送訊息是最快的.

@RabbitHandler

@RabbitListener(
     queues="queue-name" //監聽佇列
	 
[email protected]
("queue-name")//通過註解自動建立佇列 [email protected]( [email protected]("queue-name",durable="true"), [email protected](name="queue-name",durable="true"//是否持久化,type="topic"), key="keyname" //自動建立並繫結交換機和佇列,若已經存在,丟擲異常 ) ) @RabbitListener註解在類上表示當有訊息的時候就交給@RabbitHandler的方法處理,具體哪個 方法處理,根據MessageConverter轉換後的引數型別決定 @Payload 註解訊息中的body @Handers 註解訊息中的headers @Hander 獲取單個Header屬性

RabbitMQ保障100%訊息投遞成功設計方案 (一) 1 在發訊息之前 業務資料入庫 訊息記錄入庫 2 sender發訊息給broker 3 broker響應返回結果 4 Confirm Listener監聽broker返回響應的結果,入庫 5 分散式定時任務定時從庫中拉取狀態(訊息投遞未響應)的訊息,重新投遞 6 記錄投遞次數,超過一定次數,將訊息狀態改為投遞失敗

定時任務類加註解@EnableScheduling 實現SchedulingCondigurer

回撥函式:confirm確認 final ConfirmCallback confirmCallback=new RabbitTemplate.ConfirmCallback(){ public void confirm(CorrelationData correlationData,boolean ack,String Cause){ //重寫方法 } }

//傳送訊息方法呼叫:構建自定義物件資訊
     新增:rabbitTemplate.setConfirmCallback(confirmCallback);
	 
	 
RabbitMQ命令:
      	進入安裝後的 RabbitMQ 所在目錄下的 sbin 目錄:
		
		rabbitmq-server 啟動
		rabbitmq-server -detached 以守護執行緒啟動
		rabbitmqctl status 查詢伺服器狀態
		rabbitmqctl stop 關閉整個RabbitMQ節點
		rabbitmqctl -n [email protected] stop 關閉指定節點
		rabbitmqctl stop_app 關閉RabbitMQ應用程式
		rabbitmqctl start_aoo 啟動RabbitMQ應用程式
		rabbitmqctl reset 重置RabbitMQ節點
		rabbitmqctl list_queues 產看已宣告的佇列
		rabbitmqctl list_exchanges 產看已宣告交換器
		rabbitmqctl list_bindings 檢視繫結