ActiveMQ без постоянства
-
08-10-2019 - |
Вопрос
Я хотел бы создать протокол связи на основе издателя-абонента между сообщениями о создании сервера и многими клиентами, получающими их. После немного исследований я решил пойти с ActiveMQ. Я посмотрел на несколько учебных пособий и сайта ActiveMQ и настроил брокер следующим образом:
BrokerService broker = new BrokerService();
broker.setPersistent(false);
broker.addConnector("tcp://localhost:61616");
broker.start();
Мне нужна только функциональность передачи сообщения, отсутствие постоянства базы данных или что-либо одинаково. Однако, когда я запускаю приложение, папка ActiveMQ-данных создается независимо от конфигурации. Это, в свою очередь, вызывает исключение в следующий раз, когда я начну брокер.
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)
Вы можете увидеть информацию о Bug 2935 ActiveMQ.
Вы могли бы решить это, выбрав другой механизм настойчивых, хотя я странно имел эту проблему пару раз, а затем отдален
Другие советы
В моем случае удаление всех файлов данных KAHADB из следующего каталога помогает:
$ ls /var/lib/activemq/main/data$ cd kahadb
db-1.log db.data db.redo lock
тогда:
sudo service activemq restart
и все вернуться к работе
При использовании Maven Pom, затем переключитесь на `
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.8.0</version>
</dependency>
«Также не забудьте очистить содержимое в KAHADB и планировщике. Это также помогает выключить планировщик, если не нужно.