2013-08-26 88 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内部”进行备份(尽管不是文件系统备份)。