HornetQ Persistence Concepts: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 13: Line 13:
=What Does HornetQ Persist?=
=What Does HornetQ Persist?=


Naturally, HornetQ persists [[#Persistent_Messages|persistent messages]], as required by the JMS specification. It also persists some topology information ([[#Bindings|bindings]] and [[#JMS|JMS information]]).
Naturally, HornetQ persists [[#Persistent_Messages|persistent messages]], as required by the JMS specification. It also persists some topology information ([[#Bindings|bindings]] and [[#JMS|JMS information]]). HornetQ allows sending [[#Large_Messages|large messages]] - a message can be larger than the total amount of memory available to a broker - by fragmenting the messages and storing the fragments on the filesystem. Finally, HornetQ is capable of storing ''any'' message, including the non-persistent messages, on the filesystem, when the amount of memory available to the broker is not sufficient to allow handling all messages for a specific address in memory.


==Persistent Messages==
==Persistent Messages==

Revision as of 22:24, 11 March 2016

Internal

Overview

This article provides a high level overview of the HornetQ persistence concepts. It will describe what kind of data is persisted, as well as where and when. It will also discuss paging, which is a protection mechanism against running out of memory; persistence is relevant in this context because messages that do not fit in memory go to the filesystem, even if the messages themselves are marked as non-persistent.

There is No Database

Unlike other messaging systems, which do offer the option of storing message data in a relational database, HornetQ does not. For reasons that led to this decision see https://developer.jboss.org/thread/153581. More details in "Messaging persistence in EAP 6.x" https://access.redhat.com/solutions/226743.

What Does HornetQ Persist?

Naturally, HornetQ persists persistent messages, as required by the JMS specification. It also persists some topology information (bindings and JMS information). HornetQ allows sending large messages - a message can be larger than the total amount of memory available to a broker - by fragmenting the messages and storing the fragments on the filesystem. Finally, HornetQ is capable of storing any message, including the non-persistent messages, on the filesystem, when the amount of memory available to the broker is not sufficient to allow handling all messages for a specific address in memory.

Persistent Messages

All persistent messages must be stored on persistent storage, as mandated by the JMS specification. This is necessary to protect against messaging system failure: a persistent message can be presumably recovered from the persistent storage and re-sent.

Bindings

JMS

Large Messages

Non Persistent Messages

Journal

When a node is started for the first time it persists a unique identifier into its journal directory. This ID is needed for proper formation of clusters.