ActiveMQ没有持久性

我想在生成消息的服务器和接收消息的许多客户端之间建立基于发布者 – 订户的通信协议。 经过一番研究,我决定选择ActiveMQ。 我查看了一些教程和ActiveMQ站点,并按如下方式设置了代理:

BrokerService broker = new BrokerService(); broker.setPersistent(false); broker.addConnector("tcp://localhost:61616"); broker.start(); 

我只需要消息传递function,没有数据库持久性或类似的东西。 但是,当我启动应用程序时,无论配置如何,都会创建activemq-data文件夹。 这反过来会在下次启动代理时导致exception。

 SEVERE: Failed to start ActiveMQ JMS Message Broker. Reason: java.io.EOFException: Chunk stream does not exist at page: 0 

这是一个错误还是我没有正确设置代理(使用ActiveMQ 5.4.1)? 如何禁用持久性,因此不会创建额外的数据存储? 此外,我更喜欢从Java应用程序中配置代理,而不是通过xml文件。

干杯,马克斯

这不是正常行为,而是KahaDB中的一个错误(Activemq中的默认持久性存储)

您可以在ActiveMQ的Bug 2935上查看信息。

你可以通过选择一个不同的持久性引擎来解决这个问题,尽管我曾经多次遇到这个问题然后它消失了

在我的情况下,从以下目录中删除所有kahadb数据文件有助于:

 $ ls /var/lib/activemq/main/data$ cd kahadb db-1.log db.data db.redo lock 

然后:

 sudo service activemq restart 

一切恢复工作

如果使用maven pom,则切换到`

  org.apache.activemq activemq-all 5.8.0  

`也不要忘记清除KahaDB和Scheduler中的内容。 如果不需要,它还有助于关闭调度程序。