2010-10-16 26 views
2

Je souhaite configurer un protocole de communication basé sur l'éditeur-abonné entre un serveur produisant des messages et de nombreux clients les recevant. Après un peu de recherche, j'ai décidé d'aller avec ActiveMQ. Je regardais quelques tutoriels et le site ActiveMQ et mis en place le courtier comme suit:ActiveMQ sans persistance

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

Je ne ai besoin de la fonctionnalité de transmission de messages, aucune persistance de base de données ou quoi que ce soit aussi bien. Cependant, lorsque je lance l'application, un dossier activemq-data est créé indépendamment de la configuration. Cela provoque à son tour une exception la prochaine fois que je démarre le courtier.

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

Est-ce un bug ou suis-je pas la mise en place correctement le courtier (à l'aide ActiveMQ 5.4.1)? Comment puis-je désactiver la persistance, de sorte que le stockage de données supplémentaire n'est pas créé? Aussi, je préfère configurer le courtier à partir de l'application Java et pas à travers un fichier xml.

Cheers, Max

+0

Pour l'instant je trouve une solution de contournement de supprimer le dossier chaque fois que je démarre le courtier/éditeur. Ce serait génial si quelqu'un pouvait faire la lumière sur cette question de toute façon. – Max

Répondre

1

Ce n'est pas un comportement normal, mais un bogue dans KahaDB (le magasin de persistance par défaut dans ActiveMQ)

Vous pouvez voir info sur Bug 2935 of ActiveMQ.

Vous pouvez résoudre ce problème en choisissant un moteur de persistance différent, bien que je strangly eu ce problème deux ou trois fois, puis il dissapeared

+0

Merci pour votre réponse. Changer le magasin de persistance ajouterait une autre dépendance pour quelque chose que je n'ai pas l'intention d'utiliser. – Max

+0

Donc, fondamentalement, vous ne voulez pas la persistance et ne prend pas la configuration du code. Ce que j'ai lu, c'est que le paramètre sera ignoré lorsqu'un adaptateur de persistance est défini. Peut-être pourriez-vous essayer de vider les adaptateurs (l'option incase a été définie par défaut, en regardant la source, elle utilise MemoryPersistence) avant de commencer? A part cela, je dirais que c'est un bug qui doit être enregistré dans jira: s – Noctris

+0

Comme je l'ai dit, je ne veux pas introduire une autre dépendance (pour MemoryPersistence). Je suppose que je dois juste attendre que le 5.5 soit publié. Les messages dans le rapport de bug suggèrent que le bug sera corrigé dans cette version. – Max

0

si vous utilisez pom Maven, puis passez à `

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

` aussi n'oubliez pas de vider le contenu dans KahaDB et Scheduler. il aide également à éteindre le programmateur, si ce n'est pas nécessaire.

1

Dans mon cas, supprimer tous les fichiers de données kahadb dans le répertoire suivant aide:

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

alors:

sudo service activemq restart 

et tout retour au travail