blob: 8365796bba3376b13fca4e7f81500589aa0a0347 [file] [log] [blame]
<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Chapter&#160;4.&#160;Concepts</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Java-Broker-Getting-Started-CommandLine.html">Prev</a>&#160;</td><th align="center" width="60%">&#160;</th><td align="right" width="20%">&#160;<a accesskey="n" href="Java-Broker-Concepts-Broker.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="Java-Broker-Concepts"></a>Chapter&#160;4.&#160;Concepts</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="Java-Broker-Concepts.html#Java-Broker-Concepts-Overview">4.1. Overview</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Broker.html">4.2. Broker</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Virtualhost-Nodes.html">4.3. Virtualhost Nodes</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-RemoteReplicationNodes.html">4.4. Remote Replication Nodes</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Virtualhosts.html">4.5. Virtualhosts</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Exchanges.html">4.6. Exchanges</a></span></dt><dd><dl><dt><span class="section"><a href="Java-Broker-Concepts-Exchanges.html#Java-Broker-Concepts-Exchanges-Predeclared">4.6.1. Predeclared Exchanges</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Exchanges.html#Java-Broker-Concepts-Exchanges-Types">4.6.2. Exchange Types</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Exchanges.html#Java-Broker-Concepts-Exchanges-BindingArguments">4.6.3. Binding Arguments</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Exchanges.html#Java-Broker-Concepts-Exchanges-UnroutableMessage">4.6.4. Unrouteable Messages</a></span></dt></dl></dd><dt><span class="section"><a href="Java-Broker-Concepts-Queues.html">4.7. Queues</a></span></dt><dd><dl><dt><span class="section"><a href="Java-Broker-Concepts-Queues.html#Java-Broker-Concepts-Queues-Types">4.7.1. Types</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Queues.html#Java-Broker-Concepts-Queues-Message-Grouping">4.7.2. Messaging Grouping</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Queues.html#Java-Broker-Concepts-Queue-EnsureNonDestructiveConsumers">4.7.3. Forcing all consumers to be non-destructive</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Queues.html#Java-Broker-Concepts-Queue-HoldingEntries">4.7.4. Holding messages on a Queue</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Queues.html#Java-Broker-Concepts-Queue-OverflowPolicy">4.7.5. Controlling Queue Size</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Queues.html#Java-Broker-Concepts-Queues-SetLowPrefetch">4.7.6. Using low pre-fetch with special queue types</a></span></dt></dl></dd><dt><span class="section"><a href="Java-Broker-Concepts-Ports.html">4.8. Ports</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Authentication-Providers.html">4.9. Authentication Providers</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Other-Services.html">4.10. Other Services</a></span></dt><dd><dl><dt><span class="section"><a href="Java-Broker-Concepts-Other-Services.html#Java-Broker-Concepts-Access-Control-Providers">4.10.1. Access Control Providers</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Other-Services.html#Java-Broker-Concepts-Group-Providers">4.10.2. Group Providers</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Other-Services.html#Java-Broker-Concepts-Keystores">4.10.3. Keystores</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Other-Services.html#Java-Broker-Concepts-Truststores">4.10.4. Truststores</a></span></dt><dt><span class="section"><a href="Java-Broker-Concepts-Other-Services.html#Java-Broker-Concepts-Loggers">4.10.5. Loggers</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Concepts-Overview"></a>4.1.&#160;Overview</h2></div></div></div><p>The Broker comprises a number of entities. This section summaries the purpose of each of
the entities and describes the relationships between them. These details are developed further
in the sub-sections that follow.</p><p>The most important entity is the <span class="emphasis"><em>Virtualhost</em></span>. A virtualhost is an
independent container in which messaging is performed. A <span class="emphasis"><em>virtualhost</em></span> exists
in a container called a <span class="emphasis"><em>virtualhost node</em></span>. A virtualhost node has exactly
one virtualhost.</p><p>An <span class="emphasis"><em>Exchange</em></span> accepts messages from a producer application and routes these
to one or more <span class="emphasis"><em>Queues</em></span> according to pre-arranged criteria called
<span class="emphasis"><em>bindings</em></span>. Exchange are an AMQP 0-8, 0-9, 0-9-1, 0-10 concept. They exist to
produce useful messaging behaviours such as fanout. When using AMQP 0-8, 0-9, 0-9-1, or 0-10, the
exchange is the only way ingressing a message into the virtualhost. When using AMQP
1.0, the application may route messages using an exchange (to take advantage of advanced behaviours)
or it may publish messages direct to a queue.
</p><p><span class="emphasis"><em>Queue</em></span>s are named entities that hold/buffer messages for later delivery to
consumer applications.
</p><p><span class="emphasis"><em>Ports</em></span> accept connections for messaging and management. The Broker
supports any number of ports. When connecting for messaging, the user specifies a virtualhost
name to indicate the virtualhost to which it is to be connected.</p><p><span class="emphasis"><em>Authentication Providers</em></span> assert the identity of the user as it connects
for messaging or management. The Broker supports any number of authentication providers. Each
port is associated with exactly one authentication provider. The port uses the authentication
provider to assert the identity of the user as new connections are received.</p><p><span class="emphasis"><em>Group Providers</em></span> provide mechanisms that provide grouping of users. A
Broker supports zero or more group providers.</p><p><span class="emphasis"><em>Access Control Provider</em></span> allows the abilities of users (or groups of
users) to be restrained. A Broker can have zero or one access control providers.</p><p><span class="emphasis"><em>Keystores</em></span> provide a repositories of certificates and are used when the
Broker accepts SSL connections. Any number of keystore providers can be defined. Keystores are
be associated with Ports defined to accepts SSL.</p><p><span class="emphasis"><em>Truststores</em></span> provide a repositories of trust and are used to validate a
peer. Any number of truststore provides can be defined. Truststores can be associated with Ports
and other entities that form SSL connections.</p><p><span class="emphasis"><em>Remote Replication Nodes</em></span> are used when the high availability feature is
in use. It is the remote representation of other virtualhost nodes that form part of the same
group.</p><p><span class="emphasis"><em>Loggers</em></span>, at this point in the hierarchy, are responsible for the
production of a log for the Broker.</p><p>These concepts will be developed over the forthcoming pages. The diagrams below also help
put these entities in context of one and other.</p><p>
</p><div class="figure"><a id="d0e399"></a><p class="title"><strong>Figure&#160;4.1.&#160;Message Flow through Key Entities</strong></p><div class="figure-contents"><div class="mediaobject"><img alt="Message Flow through the Key Entities of the Broker" src="images/Broker-MessageFlow.png" /></div></div></div><p><br class="figure-break" />
</p><p>
</p><div class="figure"><a id="d0e411"></a><p class="title"><strong>Figure&#160;4.2.&#160;Broker Structure showing major entities</strong></p><div class="figure-contents"><div class="mediaobject"><img alt="Broker Structure" src="images/Broker-Model.png" /></div></div></div><p><br class="figure-break" />
</p></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Java-Broker-Getting-Started-CommandLine.html">Prev</a>&#160;</td><td align="center" width="20%">&#160;</td><td align="right" width="40%">&#160;<a accesskey="n" href="Java-Broker-Concepts-Broker.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">3.5.&#160;Using the command line&#160;</td><td align="center" width="20%"><a accesskey="h" href="Apache-Qpid-Broker-J-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;4.2.&#160;Broker</td></tr></table></div></div>