2016-12-28 84 views
0

在windows上,當我使用rabbitmq-serverstart/stop命令時,RabbitMQ持久隊列上的數據被刪除。似乎隊列在我啓動RabbitMQ服務器時重新創建。rabbitmq-server開始在持久隊列中丟失數據

如果我使用rabbitmqctlstop_app/start_app,我不會丟失任何數據。爲什麼?

如果我的服務器出現故障將會發生什麼,如何確保我不會丟失數據?

回答

0

配置問題:我從rabbitmq sbin目錄啓動rabbitmq。我重新安裝rabbitmq並將rabbitmq添加到Windows服務。現在數據丟失問題在我的電腦上解決了。當我啓動/停止Windows服務時,rabbitmq不會丟失任何數據。

0

將隊列耐用不夠 也許你也需要申報交換耐用以及發送「老大難」的消息

在java中,您將使用:

channel.basicPublish("", "sample_queue", 
     MessageProperties.PERSISTENT_TEXT_PLAIN, // note that this parameter is not null! 
     message.getBytes()) 

希望這幫助

+0

我也持久保留消息。當我使用rabbitmqctl啓動/停止時,我不會丟失任何「持久消息」。發佈消息時,我使用deliveryMode = 2。 – melihcoskun

+0

我知道start_app/stop_app只會重新啓動rabbit mq本身。所有持久性內容都存儲在名爲mnesia的數據庫中。它就像兔子一樣在erlang vm上運行。在linux上,你可以輸入ps -ef | grep兔子,你會看到有很多進程。所以rabbitmq-server stop會停止包括mnesia在內的所有事情。這就是兩個命令之間的區別。 –

+0

謝謝。停止Mnesia不應該是一個問題。因爲我再次啓動rabbitmq.Mnesia是一個db,當你重新啓動數據庫時,數據庫不能丟失任何數據。我沒有使用任何集羣只是單個rabbitmq實例,所以我假設單mnesia單rabbitmq集羣正在我的系統上工作。 – melihcoskun