簡體   English   中英

沒有持久性的 ActiveMQ

[英]ActiveMQ without persistence

我想在生成消息的服務器和接收它們的許多客戶端之間建立一個基於發布者-訂閱者的通信協議。 經過一番研究,我決定使用 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 文件。

干杯,馬克斯

您還可以為消息生產者設置傳遞模式。

messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

JMS 允許的整數值為:

    int NON_PERSISTENT = 1;
    int PERSISTENT = 2;

在我的情況下,從以下幫助目錄中刪除所有 kahadb 數據文件:

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

然后:

sudo service activemq restart

一切都恢復了

這不是正常行為,而是 KahaDB(Activemq 中的默認持久性存儲)中的一個錯誤

您可以查看有關ActiveMQ 的錯誤 2935 的信息。

您可以通過選擇不同的持久性引擎來解決這個問題,盡管我奇怪地遇到了幾次這個問題然后它消失了

如果使用 maven pom,則切換到 `

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

` 也不要忘記清除KahaDB 和Scheduler 中的內容。 如果不需要,它還有助於關閉調度程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM