rabbitmq消息的存儲機制以及隊列的結構,使用rabbitMq遇到的問題及解決

要清楚:RabbitMQ消息的存儲機制以及隊列的結構,下面這篇文章寫的很詳細。

https://blog.csdn.net/weixin_30391339/article/details/95013185

在公司接手了別人寫的項目,其中有用到rabbitMq作爲消息隊列。該項目中涉及到圖片轉爲base64碼。

這個項目中rabbitmq每天都會有消息產生和消費。久了之後,linux服務器磁盤爆滿,查找很多原因,領導讓我更改mysql安裝位置,清理磁盤,重裝rabbitMq等等。這時我也是第一在實戰上接觸rabbitMq,一時也不知道問題所在。後來發現rabbitMq的存儲消息的目錄(/home/boco4a/rabbitmq/rabbitmq_server-3.7.10/var/lib/rabbitmq/mnesia/rabbit@ZJHZ-BJ-CXPT1/msg_stores/vhosts/628WB79CIFDYO9LJI6DKMI09L/msg_store_persistent),佔磁盤大小41G,剛開始以爲rabbitmq的消息存儲這麼誇張,於是查找怎麼對已被消費的消息進行銷燬刪除等操作(這個rabbitMq會在一定規則下觸發垃圾回收進行刪除消息存儲的)。我在嘗試各種辦法測試和實現這個將已被消費的消息進行刪除的時候,我發現該項目的消息大小較大,原因是開發將圖片轉爲的base64碼放到隊列裏面了,這樣每條消息都很大,都會進行消息存儲,會引起內存爆炸式的增長。我改爲將圖片路徑放到消息隊列裏,消費者消費消息之後拿到圖片路徑再進行base64轉碼。這樣消息大大減小,而rabbitMq就是較小的消息存儲在rabbit_queue_index中而較大的消息存儲在rabbit_msg_store中,改了之後,我們的消息就不會存儲在rabbit_msg_store中了,這樣就解決了問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章