Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

18.12. Persistance

18.12.1. Persistance dans HornetQ

HornetQ gère sa propre persistance. Il est livré avec un journal de haute performance, qui est optimisé pour les cas d'utilisation de messagerie spécifique.
Le journal HornetQ journal est en «append» (ajout) uniquement avec une taille de fichier configurable, ce qui améliore les performances en permettant des opérations d'écriture simples. Il se compose d'un ensemble de fichiers sur le disque, qui sont initialement pré-créés à une taille fixe et remplis au fur et à mesure que les opérations de serveur (ajouter un message, supprimer le message, mise à jour de message, etc.) sont effectuées, les enregistrements des opérations sont ajoutés au journal jusqu'à ce que le fichier journal soit plein, moment à partir duquel le fichier journal suivant est utilisé.
Un algorithme de nettoyage de la mémoire détermine si les fichiers journaux peuvent être extraits à nouveau ou réutilisés quand toutes les données auront été supprimées. Un algorythme de compaction supprime les espaces vides des fichiers journaux et compriment les données.
Le journal supporte également les transaction locales et XA.
La majorité du journal est imprimée en Java, mais l'interaction avec le système de fichier a été rendue abstraite pour autoriser plusieurs implémentations enfichables. Les deux implémentations livrées avec HornetQ sont :
  • Java New I/O (NIO)
    Utilise Java NIO pour l'interface avec le système de fichiers. Cela donne une excellence performance et exécute sur n'importe quelle plate-forme avec Java 6 ou un runtime plus récent.
  • Linux Asynchronous IO (AIO)
    Utilise un encapsuleur de code natif pour parler à la bibliothèque d'e/s asynchrone Linux (AIO). Avec AIO, HornetQ reçoit un message lorsque les données ont été rendues persistantes. Cette commande supprime le besoin de synchronisation explicite. AIO fournira généralement une meilleure performance que Java NIO, mais nécessite le noyau Linux 2.6 ou version ultérieure et le package libaio.
    AIO nécessite également les systèmes de fichiers ext2, ext3, ext4, jfs ou xfs.
Le serveur standard HornetQ utilise les instances de journaux suivants :
  • bindings journal
    Stocke les données relatives à des liaisons, y compris l'ensemble des files d'attente déployées sur le serveur et leurs attributs. Il stocke également des données comme les compteurs de séquence ID. Le journal de liaisons est toujours un journal NIO, car il a généralement un débit faible en comparaison au journal de messages.
    Les fichiers de ce journal ont comme préfixe hornetq-bindings. Chaque fichier a des extensions de liaison. La taille du fichier est de 1048576 octets, et le fichier se trouve dans le dossier de liaisons.
  • JMS journal
    Stocke toutes les données liées à JMS, comme les files d'attente JMS, les sujets ou fabriques de connexions et toutes les liaisons JNDI de ces ressources. Toutes les ressources JMS créées avec l'API de gestion sont persistées dans ce journal. Toutes les ressources configurées par des fichiers de configuration ne le sont pas. Ce journal n'est créé que si JMS est utilisé.
  • message journal
    Stocke toutes les données liées à des messages, y compris les messages eux-mêmes et les duplicate-id caches. Par défaut, HornetQ utilise AIO pour son journal. Si AIO n'est pas disponible, ce sera automatiquement NIO.
Les gros messages sont persistés en dehors du journal de messages. Dans les situations de moindre mémoire, configurer HornetQ pour qu'il envoie les messages sur le disque. Si la persistance n'est pas requise, HornetQ peut être configuré pour ne persister aucune donnée.