2

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

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

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

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 文件。

干杯,马克斯

4

4 回答 4

2

您还可以为您的消息生产者设置传递模式。

messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

JMS 允许的整数值为:

    int NON_PERSISTENT = 1;
    int PERSISTENT = 2;
于 2020-04-30T13:15:33.267 回答
1

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

您可以查看有关ActiveMQ 的 Bug 2935 的信息。

您可以通过选择不同的持久性引擎来解决这个问题,尽管我奇怪地遇到了几次这个问题然后它就消失了

于 2010-10-25T15:10:13.543 回答
1

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

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

然后:

sudo service activemq restart

一切恢复正常

于 2015-02-10T02:08:02.577 回答
0

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

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>5.8.0</version>
</dependency>

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

于 2013-03-13T11:47:51.553 回答