| <?xml version="1.0"?> |
| <!-- |
| |
| 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. |
| |
| --> |
| |
| <chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="Java-Broker-Initial-Configuration"> |
| <title>Initial Configuration</title> |
| |
| |
| <section xml:id="Java-Broker-Initial-Configuration-Introduction"> |
| <title>Introduction</title> |
| <para>This section describes how to perform initial configuration on the command line. Once |
| the Broker is started, subsequent management is performed using the <link linkend="Java-Broker-Management-Channel">Management interfaces</link></para> |
| <para> The configuration for each component is stored as an entry in the broker |
| configuration store, currently implemented as a JSON file which persists changes to |
| disk, BDB or Derby database or an in-memory store which does not. The following |
| components configuration is stored there: <itemizedlist> |
| <listitem> |
| <para>Broker</para> |
| </listitem> |
| <listitem> |
| <para>Virtual Host Nodes</para> |
| </listitem> |
| <listitem> |
| <para>Loggers</para> |
| </listitem> |
| <listitem> |
| <para>Ports</para> |
| </listitem> |
| <listitem> |
| <para>Authentication Providers (optionally with Users for managing users Authentication Providers)</para> |
| </listitem> |
| <listitem> |
| <para>Access Control Providers</para> |
| </listitem> |
| <listitem> |
| <para>Group Providers (optionally with Groups and GroupMembers for managing groups Group Providers)</para> |
| </listitem> |
| <listitem> |
| <para>Key stores</para> |
| </listitem> |
| <listitem> |
| <para>Trust stores</para> |
| </listitem> |
| <listitem> |
| <para>Plugins</para> |
| </listitem> |
| </itemizedlist> |
| </para> |
| |
| <para>Broker startup involves two configuration related items, the 'Initial Configuration' |
| and the Configuration Store. When the broker is started, if a Configuration Store does |
| not exist at the current <link linkend="Java-Broker-Initial-Configuration-Location">store location</link> then one will be initialised with the current <link linkend="Java-Broker-Initial-Configuration-Initial-Config-Location">'Initial |
| Configuration'</link>. Unless otherwise requested to <link linkend="Java-Broker-Initial-Configuration-Location">overwrite the configuration |
| store</link> then subsequent broker restarts will use the existing configuration |
| store and ignore the contents of the 'Initial Configuration'. </para> |
| </section> |
| |
| <section xml:id="Java-Broker-Initial-Configuration-Location"> |
| <title>Configuration Store Location</title> |
| <para> The broker will default to using <link linkend="Java-Broker-Initial-Configuration-Configuration-Properties">\${qpid.work_dir}</link>/config.json as the path for its configuration store unless |
| otherwise instructed. </para> |
| <para> The command line argument <emphasis>-sp</emphasis> (or |
| <emphasis>--store-path</emphasis>) can optionally be used to specify a different |
| relative or absolute path to use for the broker configuration store: </para> |
| <screen> |
| $ ./qpid-server -sp ./my-broker-configuration.json |
| </screen> |
| |
| <para> If no configuration store exists at the specified/defaulted location when the broker |
| starts then one will be initialised using the current <link linkend="Java-Broker-Initial-Configuration-Initial-Config-Location">'Initial |
| Configuration'</link>. </para> |
| </section> |
| |
| <section xml:id="Java-Broker-Initial-Configuration-Initial-Config-Location"> |
| <title>'Initial Configuration' Location</title> |
| <para> The 'Initial Configuration' JSON file is used when initialising new broker |
| configuration stores. The broker will default to using an internal file within its jar |
| unless otherwise instructed. </para> |
| <para> The command line argument <emphasis>-icp </emphasis> (or |
| <emphasis>--initial-config-path</emphasis>) can be used to override the brokers |
| internal file and supply a <link linkend="Java-Broker-Initial-Configuration-Create-Initial-Config">user-created |
| one</link>:</para> |
| <screen> |
| $ ./qpid-server -icp ./my-initial-configuration.json |
| </screen> |
| |
| <para> If a Configuration Store already exists at the current <link linkend="Java-Broker-Initial-Configuration-Location">store location</link> then the |
| current 'Initial Configuration' will be ignored unless otherwise requested to <link linkend="Java-Broker-Initial-Configuration-Location">overwrite the configuration |
| store</link> |
| </para> |
| </section> |
| |
| <section xml:id="Java-Broker-Initial-Configuration-Create-Initial-Config"> |
| <title>Creating an 'Initial Configuration' JSON File</title> |
| |
| <para> It is possible to have the broker output its default internal 'Initial Configuration' |
| file to disk using the command line argument <emphasis>-cic</emphasis> (or |
| <emphasis>--create-initial-config</emphasis>). If the option is used without |
| providing a path, a file called <emphasis>initial-config.json</emphasis> will be created |
| in the current directory, or alternatively the file can be created at a specified |
| location: </para> |
| <screen> |
| $ ./qpid-server -cic ./initial-config.json |
| </screen> |
| |
| <para> The 'Initial Configuration' JSON file shares a common format with the brokers JSON |
| Configuration Store implementation, so it is possible to use a Broker's Configuration |
| Store output as an initial configuration. Typically 'Initial Configuration' files would |
| not to contain IDs for the configured entities, so that IDs will be generated when the |
| configuration store is initialised and prevent use of the same IDs across multiple |
| brokers, however it may prove useful to include IDs if using the Memory <link linkend="Java-Broker-Initial-Configuration-Type">Configuration Store Type</link>. </para> |
| <para> It can be useful to use <link linkend="Java-Broker-Initial-Configuration-Configuration-Properties">Configuration |
| Properties</link> within 'Initial Configuration' files to allow a degree of |
| customisation with an otherwise fixed file. </para> |
| <para> For an example file, see <xref linkend="Java-Broker-Initial-Configuration-Example"/> |
| </para> |
| |
| </section> |
| |
| <section xml:id="Java-Broker-Initial-Configuration-Overwrite-Config-Store"> |
| <title>Overwriting An Existing Configuration Store</title> |
| <para> If a configuration store already exists at the configured <link linkend="Java-Broker-Initial-Configuration-Location">store location</link> then it |
| is used and the current <link linkend="Java-Broker-Initial-Configuration-Initial-Config-Location">'Initial |
| Configuration'</link> is ignored. </para> |
| <para> The command line argument <emphasis>-os</emphasis> (or |
| <emphasis>--overwrite-store</emphasis>) can be used to force a new broker |
| configuration store to be initialised from the current 'Initial Configuration' even if |
| one exists: </para> |
| <screen> |
| $ ./qpid-server -os -icp ./my-initial-configuration.json |
| </screen> |
| <para> This can be useful to effectively play configuration into one or more broker to |
| pre-configure them to a particular state, or alternatively to ensure a broker is always |
| started with a fixed configuration. In the latter case, use of the Memory <link linkend="Java-Broker-Initial-Configuration-Type">Configuration Store Type</link> may |
| also be useful. </para> |
| </section> |
| |
| <section xml:id="Java-Broker-Initial-Configuration-Type"> |
| <title>Configuration Store Type</title> |
| <para> There are currently several implementations of the pluggable Broker Configuration Store: |
| <variablelist> |
| <varlistentry> |
| <term>JSON</term> |
| <listitem><para>the default one which persists content to disk in a JSON file</para></listitem> |
| </varlistentry> |
| <varlistentry> |
| <term>Memory</term> |
| <listitem><para>operates only in-memory and so does not retain changes across broker |
| restarts and always relies on the current <link linkend="Java-Broker-Initial-Configuration-Initial-Config-Location">'Initial |
| Configuration'</link> to provide the configuration to start the broker with. |
| </para></listitem> |
| </varlistentry> |
| <varlistentry> |
| <term>DERBY</term> |
| <listitem><para>stores configuration in embedded derby store</para></listitem> |
| </varlistentry> |
| <varlistentry> |
| <term>BDB</term> |
| <listitem><para>stores configuration in Berkeley DB store</para></listitem> |
| </varlistentry> |
| <varlistentry> |
| <term>JDBC</term> |
| <listitem><para>stores configuration in external RDBMS using JDBC</para></listitem> |
| </varlistentry> |
| </variablelist> |
| </para> |
| <para> The command line argument <emphasis>-st</emphasis> (or |
| <emphasis>--store-type</emphasis>) can be used to override the default |
| <emphasis>json</emphasis>)configuration store type and allow choosing an alternative, |
| such as <emphasis>Memory</emphasis>) </para> |
| <screen> |
| $ ./qpid-server -st memory |
| </screen> |
| <para> This can be useful when running tests, or always wishing to start the broker with the |
| same <link linkend="Java-Broker-Initial-Configuration-Initial-Config-Location">'Initial |
| Configuration'</link> |
| </para> |
| <para>Another example of broker startup with configuration in DERBY network server</para> |
| <screen> |
| $ ./qpid-server -st JDBC \ |
| -prop "systemConfig.connectionUrl=jdbc:derby://localhost:1527/path/to/store;create=true" \ |
| -prop "systemConfig.username=test" -prop "systemConfig.password=password" |
| </screen> |
| </section> |
| |
| <section xml:id="Java-Broker-Initial-Configuration-Configuration-Properties"> |
| <title>Customising Configuration using Configuration Properties</title> |
| <para> It is possible for 'Initial Configuration' (and Configuration Store) files to contain |
| \${properties} that can be resolved to String values at startup, allowing a degree of |
| customisation using a fixed file. Configuration Property values can be set either via |
| Java System Properties, or by specifying ConfigurationProperties on the broker command |
| line. If both are defined, System Property values take precedence. </para> |
| |
| <para> The broker has the following set of core configuration properties, with the indicated |
| default values if not otherwise configured by the user: <table> |
| <title>Base Configuration Properties</title> |
| <tgroup cols="3"> |
| <thead> |
| <row> |
| <entry> Name </entry> |
| <entry> Description </entry> |
| <entry> Value </entry> |
| </row> |
| </thead> |
| <tbody> |
| <row> |
| <entry> qpid.amqp_port </entry> |
| <entry> Port number used for the brokers default AMQP messaging port </entry> |
| <entry> "5672" </entry> |
| </row> |
| <row> |
| <entry> qpid.http_port </entry> |
| <entry> Port number used for the brokers default HTTP management port </entry> |
| <entry> "8080" </entry> |
| </row> |
| <row> |
| <entry> qpid.home_dir </entry> |
| <entry> Location of the broker installation directory, which contains |
| the 'lib' directory and the 'etc' directory often used to store |
| files such as group and ACL files. </entry> |
| <entry> Defaults to the value set into the QPID_HOME system property if |
| it is set, or remains unset otherwise unless configured by the user. |
| </entry> |
| </row> |
| <row> |
| <entry> qpid.work_dir </entry> |
| <entry> Location of the broker working directory, which might contain |
| the persistent message store and broker configuration store files. </entry> |
| <entry> Defaults to the value set into the QPID_WORK system property if |
| it is set, or the 'work' subdirectory of the JVMs current working |
| directory. </entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| </para> |
| |
| <para> Use of these core properties can be seen in the <link linkend="Java-Broker-Initial-Configuration-Example">default 'Initial Configuration' example</link>. </para> |
| |
| <para> Configuration Properties can be set on the command line using the |
| <emphasis>-prop</emphasis> (or <emphasis>--configuration-property</emphasis>) |
| command line argument: </para> |
| |
| <screen> |
| $ ./qpid-server -prop "qpid.amqp_port=10000" -prop "qpid.http_port=10001" |
| </screen> |
| <para> In the example above, property used to set the port number of the default AMQP port |
| is specified with the value 10000, overriding the default value of 5672, and similarly |
| the value 10001 is used to override the default HTTP port number of 8080. When using the |
| 'Initial Configuration' to initialise a new Configuration Store (either at first broker |
| startup, when requesting to <link linkend="Java-Broker-Initial-Configuration-Location">overwrite the configuration store</link>) these new values will be used for the |
| port numbers instead. </para> |
| <para> NOTE: When running the broker on Windows and starting it via the qpid-server.bat |
| file, the "name=value" argument MUST be quoted. </para> |
| |
| </section> |
| |
| <section xml:id="Java-Broker-Initial-Configuration-Example"> |
| <title>Example of JSON 'Initial Configuration'</title> |
| <para> An example of the default 'Initial Configuration' JSON file the broker uses is |
| provided below:</para> |
| <example> |
| <title>JSON 'Initial configuration' File</title> |
| <programlisting> |
| { |
| "name": "\${broker.name}", |
| "modelVersion": "6.0", |
| "authenticationproviders" : [ { |
| "name" : "passwordFile", |
| "type" : "PlainPasswordFile", |
| "path" : "\${qpid.home_dir}\${file.separator}etc\${file.separator}passwd", |
| "preferencesproviders" : [{ |
| "name": "fileSystemPreferences", |
| "type": "FileSystemPreferences", |
| "path" : "\${qpid.work_dir}\${file.separator}user.preferences.json" |
| }] |
| } ], |
| "brokerloggers" : [ { |
| "name" : "logfile", |
| "type" : "File", |
| "fileName" : "\${qpid.work_dir}\${file.separator}log\${file.separator}qpid.log", |
| "brokerloginclusionrules" : [ { |
| "name" : "Root", |
| "type" : "NameAndLevel", |
| "level" : "WARN", |
| "loggerName" : "ROOT" |
| }, { |
| "name" : "Qpid", |
| "type" : "NameAndLevel", |
| "level" : "INFO", |
| "loggerName" : "org.apache.qpid.*" |
| }, { |
| "name" : "Operational", |
| "type" : "NameAndLevel", |
| "level" : "INFO", |
| "loggerName" : "qpid.message.*" |
| } ] |
| }, { |
| "name" : "memory", |
| "type" : "Memory", |
| "brokerloginclusionrules" : [ { |
| "name" : "Root", |
| "type" : "NameAndLevel", |
| "level" : "WARN", |
| "loggerName" : "ROOT" |
| }, { |
| "name" : "Qpid", |
| "type" : "NameAndLevel", |
| "level" : "INFO", |
| "loggerName" : "org.apache.qpid.*" |
| }, { |
| "name" : "Operational", |
| "type" : "NameAndLevel", |
| "level" : "INFO", |
| "loggerName" : "qpid.message.*" |
| } ] |
| } ], |
| "ports" : [ { |
| "name" : "AMQP", |
| "port" : "\${qpid.amqp_port}", |
| "authenticationProvider" : "passwordFile", |
| "virtualhostaliases" : [ { |
| "name" : "nameAlias", |
| "type" : "nameAlias" |
| }, { |
| "name" : "defaultAlias", |
| "type" : "defaultAlias" |
| }, { |
| "name" : "hostnameAlias", |
| "type" : "hostnameAlias" |
| } ] |
| }, { |
| "name" : "HTTP", |
| "port" : "\${qpid.http_port}", |
| "authenticationProvider" : "passwordFile", |
| "protocols" : [ "HTTP" ] |
| }], |
| "virtualhostnodes" : [ { |
| "name" : "default", |
| "type" : "JSON", |
| "defaultVirtualHostNode" : "true", |
| "virtualHostInitialConfiguration" : "\\\${qpid.initial_config_virtualhost_config}" |
| } ], |
| "plugins" : [ { |
| "type" : "MANAGEMENT-HTTP", |
| "name" : "httpManagement" |
| } ] |
| } |
| </programlisting> |
| <para>In the configuration above the following entries are stored: <itemizedlist> |
| <listitem> |
| <para> Authentication Provider of type |
| <emphasis>PlainPasswordFile</emphasis> with name "passwordFile". |
| </para> |
| </listitem> |
| <listitem> |
| <para> Two Port entries: "AMQP", "HTTP" |
| </para> |
| </listitem> |
| <listitem> |
| <para> Virtualhost Node called default. On initial startup, it |
| virtualHostInitialConfiguration will cause a virtualhost to be created |
| with the same name. The configuration will be stored in a |
| <emphasis>JSON</emphasis> configuration store, the message data will |
| be stored in a <emphasis>DERBY</emphasis> message store.</para> |
| </listitem> |
| <listitem> |
| <para>One management plugin: "httpManagement" of type "MANAGEMENT-HTTP".</para> |
| </listitem> |
| <listitem> |
| <para>Broker attributes are stored as a root entry.</para> |
| </listitem> |
| </itemizedlist> |
| </para> |
| </example> |
| </section> |
| |
| </chapter> |