一、如何測試RabbitMQ的功能
1、聯系開發找到隊列的名稱;登錄MQ后台管理地址;點擊Queues頁,輸入隊列名搜索出目標隊列(支持模糊查詢)
2、准備測試數據
(1)已知json格式時,根據不同的場景,提前准備各種格式的json;
(2)未知json格式時,點擊隊列名,在Get Messages輸入數量,點擊Get Message(s)按鈕,下方顯示數據。復制出格式后,根據不同的場景,提前准備各種格式的json;
圖1
圖2
3、啟動tomcat,如無異常,消費者線程已自動啟動,重點關注自啟動消費者
4、產生消息
(1)運行QueueTest中的producer產生消息(從代碼層測試時)
(2)RabbitMQ上面直接publish
(3)產生MQ消息的地方操作產生
5、驗證程序是否正確消費此消息
異常場景:
1、消費者啟動后,未顯示在隊列的Consumers
2、消費者啟動后,消費入庫時報錯
3、消費者啟動后,輸入正確的json,重復入庫
4、消費者啟動后,消費但未入庫
5、消費者啟動后,消費者剛開始顯示,但后來消失(消費者假死)
6、消費者啟動后,輸入錯誤的json,消費失敗
7、消費者啟動后,消費者堵塞(隊列阻塞,無法繼續添加數據,可能導致服務掛掉)
二、如何測試 rabbitmq 的性能
測試持久化和非持久化狀態下上述場景的收/發性能、不同消息大小狀態的收/發性能。
輪持久化的重要性:持久化的服務器收到消息后就會立刻將消息寫入到硬盤,就可以防止突然服務器掛掉,而引起的數據丟失了。但是服務器如果剛收到消息,還沒來得及寫入到硬盤,就掛掉了,這樣還是無法避免消息的丟失。
Rabbitmq原生是非持久化狀態,需要重新封裝才能為持久化狀態。常用的exchange類型有三個direct(發布與訂閱)、fanout(廣播)、topic(主題)
測試方法(百度知道搜索的,未親自實踐):
1、聲明7個具有不同屬性的queue,分別和名為test_exchage的exchange進行綁定(因為exchange為fanout類型,所以測試代碼中的routing_key其實是不起作用的);
2、向exchange發送具有persistent屬性的消息(delivery_mode=2);
3、創建7個消費者分別從上述7個queue中獲取消息;
4、測試結果如下
三、學習資料