blob: 68b1ba6dbbcfed7c34f6760c07d314380457dae2 [file] [log] [blame]
<!DOCTYPE html>
<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Chapter&#160;4.&#160;Concepts - Apache Qpid&#8482;</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
<link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
<script type="text/javascript">var _deferredFunctions = [];</script>
<script type="text/javascript" src="/deferred.js" defer="defer"></script>
<!--[if lte IE 8]>
<link rel="stylesheet" href="/ie.css" type="text/css"/>
<script type="text/javascript" src="/html5shiv.js"></script>
<![endif]-->
<!-- Redirects for `go get` and godoc.org -->
<meta name="go-import"
content="qpid.apache.org git https://gitbox.apache.org/repos/asf/qpid-proton.git"/>
<meta name="go-source"
content="qpid.apache.org
https://github.com/apache/qpid-proton/blob/go1/README.md
https://github.com/apache/qpid-proton/tree/go1{/dir}
https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
</head>
<body>
<div id="-content">
<div id="-top" class="panel">
<a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
<a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
<ul id="-global-navigation">
<li><a id="-logotype" href="/index.html">Apache Qpid<sup>&#8482;</sup></a></li>
<li><a href="/documentation.html">Documentation</a></li>
<li><a href="/download.html">Download</a></li>
<li><a href="/discussion.html">Discussion</a></li>
</ul>
</div>
<div id="-menu" class="panel" style="display: none;">
<div class="flex">
<section>
<h3>Project</h3>
<ul>
<li><a href="/overview.html">Overview</a></li>
<li><a href="/components/index.html">Components</a></li>
<li><a href="/releases/index.html">Releases</a></li>
</ul>
</section>
<section>
<h3>Messaging APIs</h3>
<ul>
<li><a href="/proton/index.html">Qpid Proton</a></li>
<li><a href="/components/jms/index.html">Qpid JMS</a></li>
<li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
</ul>
</section>
<section>
<h3>Servers and tools</h3>
<ul>
<li><a href="/components/broker-j/index.html">Broker-J</a></li>
<li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
<li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
</ul>
</section>
<section>
<h3>Resources</h3>
<ul>
<li><a href="/dashboard.html">Dashboard</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
<li><a href="/resources.html">More resources</a></li>
</ul>
</section>
</div>
</div>
<div id="-search" class="panel" style="display: none;">
<form action="http://www.google.com/search" method="get">
<input type="hidden" name="sitesearch" value="qpid.apache.org"/>
<input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
<button type="submit">Search</button>
<a href="/search.html">More ways to search</a>
</form>
</div>
<div id="-middle" class="panel">
<ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-broker-j-7.1.9/index.html">Qpid Broker-J 7.1.9</a></li><li><a href="/releases/qpid-broker-j-7.1.9/book/index.html">Apache Qpid Broker-J</a></li><li>Chapter&#160;4.&#160;Concepts</li></ul>
<div id="-middle-content">
<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>
<hr/>
<ul id="-apache-navigation">
<li><a href="http://www.apache.org/">Apache</a></li>
<li><a href="http://www.apache.org/licenses/">License</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
<li><a href="/security.html">Security</a></li>
<li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
</ul>
<p id="-legal">
Apache Qpid, Messaging built on AMQP; Copyright &#169; 2015
The Apache Software Foundation; Licensed under
the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
Proton, Apache, the Apache feather logo, and the Apache Qpid
project logo are trademarks of The Apache Software
Foundation; All other marks mentioned may be trademarks or
registered trademarks of their respective owners
</p>
</div>
</div>
</div>
</body>
</html>