2013-08-26 85 views
2

在備份期間,我想暫停HornetQ中的所有JMS隊列,以拍攝磁盤快照。在jboss-cli我打電話:在Jboss AS7上暫停Hornetq

connect 
/subsystem=messaging/hornetq-server=default/jms-queue=%queueName:pause 

但是隊列沒有暫停。我如何暫停所有JMS作業?

UPD

重現步驟:

[email protected]:/opt/jboss/bin# ./jboss-cli.sh 
You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands. 
[disconnected /] connect 
[[email protected]:9999 /] /subsystem=messaging/hornetq-server=default/jms-queue=AIIndex:pause   
{ 
    "outcome" => "success", 
    "result" => undefined 
} 
[[email protected]:9999 /] 

但是當我打電話

[[email protected]:9999 /] /subsystem=messaging/hornetq-server=default/jms-queue=AIIndex:count-messages 
{ 
"outcome" => "success", 
"result" => 128L 
} 

所以每當我打電話/subsystem=messaging/hornetq-server=default/jms-queue=AIIndex:count-messages它顯示了不同的值。

+0

請提供您正在使用的完整命令行。 '%queuename'是一個變量還是帶有這個名字的隊列真的存在?你的命令返回什麼,你期望什麼? – Beryllium

回答

3

我可以重現它:pause只是禁用消息接收(接收器不會得到任何消息,並且沒有錯誤消息)。但它仍然可以發送消息。我還沒有發現任何其他操作,既不在隊列中,也不在子系統級別上。所以我只能確認它不能像預期的那樣工作。


hornetq在內部使用journal。報價:

HornetQ日誌僅附加一個可配置的文件大小,通過啓用單個寫入操作來提高性能。它由一組磁盤上的文件組成,它們最初預先創建爲固定大小並填充填充。隨着服務器操作(添加消息,刪除消息,更新消息等)的執行,操作記錄將附加到日誌中,直到日誌文件已滿,此時將使用下一個日誌文件。

至於journal flush/sync另一句名言:

雜誌同步事務

如果爲true,HornetQ的確保所有交易數據被刷新到磁盤上的事務邊界(提交,準備和回滾) 。默認值是true。

軸頸同步非事務

如果爲真,HornetQ的確保非事務消息數據(發送和通知)被刷新到磁盤。默認值是true。

這看起來不錯,但我還沒有發現確認可以備份.../data/messaging*/目錄。可能沒有解決方案來從「外部」獲得一致的備份。


所以,我知道的唯一可靠的方法是使用一個active/passive setup:一個報價:

HornetQ可以對服務器來作爲活被聯繫在一起 - 備份對。在這個版本中,每個活動服務器都有一個備份服務器。備份服務器僅由一臺實時服務器擁有。在發生故障轉移之前,備份服務器不能運行。

這種方法從「在JBoss內部」進行備份(儘管不是文件系統備份)。