<!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>12.4. Broker Customization - 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-9.2.0/index.html">Qpid Broker-J 9.2.0</a></li><li><a href="/releases/qpid-broker-j-9.2.0/book/index.html">Apache Qpid Broker-J</a></li><li>12.4. Broker Customization</li></ul>

        <div id="-middle-content">
          <div class="docbook"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">12.4. Broker Customization</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Java-Broker-Docker-Broker-Users.html">Prev</a> </td><th width="60%" align="center">Chapter 12. Docker Images</th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Java-Broker-Docker-Broker-Customization"></a>12.4. Broker Customization</h2></div></div></div><p>
            To customize broker before building the container image, its configuration files may be edited to start
            broker with queues, exchanges, users or other objects.
        </p><p>
            The file config.json contains definitions of the broker objects and references a file containing definitions
            of virtualhost objects (exchanges and queues).
        </p><p>
            It may be helpful first to create broker objects needed via broker web GUI or via REST API, and then
            investigate the configuration files and copy the appropriate definitions to the configuration files used
            for container image creation.
        </p><p>
            An example of the default initial configuration JSON file is provided in broker book
            (<a class="link" href="Java-Broker-Initial-Configuration.html" title="Chapter 5. Initial Configuration">chapter 5.7</a>).
        </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Docker-Broker-Customization-Exchanges"></a>12.4.1. Exchanges</h3></div></div></div><p>
                To create exchanges a JSON element "exchanges" should be created containing an array of single
                exchange definitions:
            </p><p>
                </p><pre class="programlisting">
    "exchanges" : [ {
        "name" : "amq.direct",
        "type" : "direct"
      }, {
        "name" : "amq.fanout",
        "type" : "fanout"
      }, {
        "name" : "amq.match",
        "type" : "headers"
      }, {
        "name" : "amq.topic",
        "type" : "topic"
      }, {
        "name" : "request.QUEUE1",
        "type" : "topic",
        "durable" : true,
        "durableBindings" : [ {
        "arguments" : { },
        "destination" : "QUEUE1",
        "bindingKey" : "#"
      } ],
      "unroutableMessageBehaviour" : "REJECT"
    } ]
                </pre><p>
            </p><p>
                Information about exchanges, their types and properties can be found in broker book
                (<a class="link" href="Java-Broker-Concepts-Exchanges.html" title="4.6. Exchanges">chapter 4.6</a>).
            </p><p>
                Please note that each virtualhost pre-declares several exchanges, described in the broker book
                (<a class="link" href="Java-Broker-Concepts-Exchanges.html#Java-Broker-Concepts-Exchanges-Predeclared" title="4.6.1. Predeclared Exchanges">chapter 4.6.1</a>).
            </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Docker-Broker-Customization-Queues"></a>12.4.2. Queues</h3></div></div></div><p>
                To create queue a JSON element "queues" should be created containing an array of single queue definitions:
            </p><p>
                </p><pre class="programlisting">
    "queues" : [ {
        "name" : "QUEUE1",
        "type" : "standard",
        "durable" : true,
        "maximumQueueDepthBytes" : 6144000,
        "maximumQueueDepthMessages" : 6000,
        "messageDurability" : "ALWAYS",
        "overflowPolicy" : "REJECT"
      }, {
        "name" : "QUEUE2",
        "type" : "standard",
        "durable" : true,
        "maximumQueueDepthBytes" : 6144000,
        "maximumQueueDepthMessages" : 6000,
        "messageDurability" : "ALWAYS",
        "overflowPolicy" : "REJECT"
      } ]
                </pre><p>
            </p><p>
                Information about queues, their types and properties can be found in broker book
                (<a class="link" href="Java-Broker-Concepts-Queues.html" title="4.7. Queues">chapter 4.7</a>).
            </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Docker-Broker-Customization-Users"></a>12.4.3. Users</h3></div></div></div><p>
                Users can be defined in an authentication provider. Authentication providers are defined on broker
                level (file config.json).
            </p><p>
                Information about authentication providers, their types and properties can be found in broker book
                (<a class="link" href="Java-Broker-Security.html#Java-Broker-Security-Authentication-Providers" title="8.1. Authentication Providers">chapter 8.1</a>).
            </p><p>
                Examples for most commonly used authentication providers can be found below.
            </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Docker-Broker-Customization-Users-Anonymous"></a>12.4.3.1. Anonymous Authentication Provider</h4></div></div></div><p>
                    </p><pre class="programlisting">
    "authenticationproviders" : [ {
        "name" : "anon",
        "type" : "Anonymous"
    } ]
                    </pre><p>
                </p><p>
                    For additional details see broker book
                    (<a class="link" href="Java-Broker-Security.html#Java-Broker-Security-Anonymous-Provider" title="8.1.5. Anonymous">chapter 8.1.5</a>).
                </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Docker-Broker-Customization-Users-Plain"></a>12.4.3.2. Plain Authentication Provider</h4></div></div></div><p>
                    </p><pre class="programlisting">
    "authenticationproviders" : [{
        "name" : "plain",
        "type" : "Plain",
        "secureOnlyMechanisms" : [],
        "users" : [ {
            "name" : "admin",
            "type" : "managed",
            "password" : "&lt;PASSWORD&gt;"
        } ]
    } ]
                    </pre><p>
                </p><p>
                    For additional details see broker book
                    (<a class="link" href="Java-Broker-Security.html#Java-Broker-Security-Plain-Provider" title="8.1.7. Plain">chapter 8.1.7</a>).
                </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="Java-Broker-Docker-Broker-Customization-Users-ACL"></a>12.4.3.3. ACL Rules</h4></div></div></div><p>
                    The ACL rules for users are defined in file broker.acl following the syntax:
                </p><p>
                    </p><pre class="programlisting">
                        ACL {permission} {&lt;group-name&gt;|&lt;user-name&gt;|ALL} {action|ALL} [object|ALL] [property=&lt;property-values&gt;]
                    </pre><p>
                </p><p>
                    The predefined broker.acl file contains permissions for the 'admin' user:
                </p><p>
                    </p><pre class="programlisting">
    # account 'admin' - enabled all actions
    ACL ALLOW-LOG admin ALL ALL
                    </pre><p>
                </p><p>
                    For additional details see broker book
                    (<a class="link" href="Java-Broker-Security-AccessControlProviders.html#Java-Broker-Security-AccessControlProviders-ACLRules" title="8.3.2.  ACL Rules">chapter 8.3.2</a>).
                </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="Java-Broker-Docker-Broker-Customization-Override"></a>12.4.4. Overriding Broker Configuration</h3></div></div></div><p>
            Customized configuration for the Broker-J instance can be used by replacing the files residing in the work
            folder with the custom ones, e.g. config.json or default.json. Put the replacement files inside a folder
            and map it as a volume to:
        </p><p>
            </p><pre class="programlisting">
    docker run -d -p 5672:5672 -p 8080:8080 -v &lt;DIRECTORY_ON_HOST&gt;:/qpid-broker-j/work-override:Z --name qpid &lt;IMAGE_NAME&gt;
            </pre><p>
        </p><p>
            The contents of work-override folder will be copied over to work folder first time after the instance creation so that
            the broker will start with user-supplied configuration.
        </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="Java-Broker-Docker-Broker-Users.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="Java-Broker-Docker.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">12.3. Broker Users </td><td width="20%" align="center"><a accesskey="h" href="Apache-Qpid-Broker-J-Book.html">Home</a></td><td width="40%" align="right" valign="top"> </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>
