一、rabbitMQ的數據和日志的存儲位置
當我們安裝rabbitMQ時,系統RabbitMQ默認讀取的配置文件路徑在%AppData%\RabbitMQ中,我們可以從以下腳本文件中可以看出:
想找到這個存儲位置,一般我們就可以先去該文件路徑查看有沒有最近的日志和數據,那為什么要看有沒有最近日期的呢?
答:因為日志和數據的位置是可以人為改變的,如果日志和數據的最新日期已經停留在很久之前並且隊列一直都是在使用的,那么99%的可能都是因為存儲位置改變了。
那么是如何改變的呢?
我們可以參考這篇文章:https://www.cnblogs.com/chinaifae/p/9993231.html
我自己也試了一下,見下圖:
從圖中以及上面的腳本文件截圖中 我們都可以看出,這個數據和日志的存儲位置 取決於這個 RABBITMQ_BASE的環境變量。當卸載服務之后,指定了 RABBITMQ_BASE的值為D:\RabbitMQ\Data,然后重新安裝服務,那么我們就成功將日志和數據存儲的位置從%AppData%\RabbitMQ更改到D:\RabbitMQ\Data了,當然原先文件中的文件還是要記得拷貝回來哦,不然當你重啟rabbitMQ服務,瀏覽localhost:15692是會發現訪問不了的。
當重啟系統之后,問題又來了,發現在windows的系統變量中並沒有發現RABBITMQ_BASE的環境變量,那么這個環境變量的值到底是存儲在哪讓程序讀取到的呢?
經過無比艱難的尋找過程之后,終於在系統注冊表中發現了他的蹤跡…
大家還記得Erlang這個東西嗎,沒錯,當我們安裝rabbitMQ之前,需要先搭建一個Erlang的語言環境,意思也就是RabbitMQ是依附在Erlang下執行的,那么大家有沒有想過,我們在安裝過程中並沒有對Erlang指定過RabbitMQ在哪或者是別的一些信息,那么Erlang是怎么知道的呢?答案都在下圖中。
沒錯,這些信息在安裝RabbitMQ Sevice時都被寫入了該注冊表中,從上圖中可以看出記錄很多有關RabbitMq配置的很多信息,我們想要看到的D:\RabbitMQ\Data的值也成功找到。
所以,如果在上面的方法中發現存儲位置不在%AppData%\RabbitMQ中,我們可以通過查看注冊表來查看日志和數據存儲的位置。
二、如何遷移
好了,上面的內容成功介紹了 rabbitMQ的日志以及數據的存儲位置,以及如何更改這個位置。
那么我們想將一個服務器上的rabbitMQ的隊列數據想拷到另外一個服務器上的rabbitMQ中,該怎么辦呢?畢竟,在我們日常工作中,往往正式服務器的RabbitMQ中的數據消費時出了什么問題,本地想調試時,不知道該怎么辦,如果知道怎么轉移,那么我們就可以輕松在本地調試本地的rabbitMQ隊列屬於正式服務器中隊列的數據了。
1.找到正式服務器上日志和數據存儲的位置,然后找到該目錄下db\rabbit@WIN-QGDGOM87JML-mnesia\msg_stores\vhosts\628WB79CIFDYO9LJI6DKMI09L的文件夾,將里面的內容拷貝。
2.找到本地服務器上日志和數據存儲的位置,同樣找到上面的文件夾,將1里面拷貝的內容覆蓋本地(覆蓋之前最好備份下本地哦,這樣測試完,還可在恢復回去)
覆蓋的時候,還要注意一點,記得將rabbitMQ的服務停掉,否則是覆蓋不了的哦,如果停了rabbitMQ的服務還是不行,請查看有關erlang的服務有沒有全部停掉。
3.覆蓋結束之后,重啟rabbitMQ服務,這樣我們去訪問本地的隊列,就會發現數據已經全部進去啦。