activemq-artemis/docs/user-manual/en/using-server.md

463 lines
15 KiB
Markdown

# Using the Server
This chapter will familiarise you with how to use the Apache ActiveMQ Artemis server.
We'll show where it is, how to start and stop it, and we'll describe the
directory layout and what all the files are and what they do.
For the remainder of this chapter when we talk about the Apache ActiveMQ Artemis server
we mean the Apache ActiveMQ Artemis standalone server, in its default configuration
with a JMS Service enabled.
This document will refer to the full path of the directory where the ActiveMQ
distribution has been extracted to as `${ARTEMIS_HOME}` directory.
Installation
============
After downloading the distribution, the following highlights some important folders on the distribution:
|___ bin
|
|___ web
| |___ user-manual
| |___ api
|
|___ examples
| |___ core
| |___ javaee
| |___ jms
|
|___ lib
|
|___ schema
- `bin` -- binaries and scripts needed to run ActiveMQ Artemis.
- `web` -- The folder where the web context is loaded when ActiveMQ Artemis runs.
- `user-manual` -- The user manual is placed under the web folder.
- `api` -- The api documentation is placed under the web folder
- `examples` -- JMS and Java EE examples. Please refer to the 'running
examples' chapter for details on how to run them.
- `lib` -- jars and libraries needed to run ActiveMQ Artemis
- `licenses` -- licenses for ActiveMQ Artemis
- `schemas` -- XML Schemas used to validate ActiveMQ Artemis configuration
files
## Creating a Broker Instance
A broker instance is the directory containing all the configuration and runtime
data, such as logs and data files, associated with a broker process. It is recommended that
you do *not* create the instance directory under `${ARTEMIS_HOME}`. This separation is
encouraged so that you can more easily upgrade when the next version of ActiveMQ Artemis is released.
On Unix systems, it is a common convention to store this kind of runtime data under
the `/var/lib` directory. For example, to create an instance at '/var/lib/mybroker', run
the following commands in your command line shell:
cd /var/lib
${ARTEMIS_HOME}/bin/artemis create mybroker
A broker instance directory will contain the following sub directories:
* `bin`: holds execution scripts associated with this instance.
* `etc`: hold the instance configuration files
* `data`: holds the data files used for storing persistent messages
* `log`: holds rotating log files
* `tmp`: holds temporary files that are safe to delete between broker runs
At this point you may want to adjust the default configuration located in
the `etc` directory.
###Options
There are several options you can use when creating an instance.
For a full list of updated properties always use:
```
$./artemis help create
NAME
artemis create - creates a new broker instance
SYNOPSIS
artemis create [--addresses <addresses>] [--aio] [--allow-anonymous]
[--autocreate] [--blocking] [--cluster-password <clusterPassword>]
[--cluster-user <clusterUser>] [--clustered] [--data <data>]
[--default-port <defaultPort>] [--disable-persistence]
[--encoding <encoding>] [--failover-on-shutdown] [--force]
[--global-max-size <globalMaxSize>] [--home <home>] [--host <host>]
[--http-host <httpHost>] [--http-port <httpPort>]
[--java-options <javaOptions>] [--mapped] [--max-hops <maxHops>]
[--message-load-balancing <messageLoadBalancing>] [--name <name>]
[--nio] [--no-amqp-acceptor] [--no-autocreate] [--no-autotune]
[--no-fsync] [--no-hornetq-acceptor] [--no-mqtt-acceptor]
[--no-stomp-acceptor] [--no-web] [--paging] [--password <password>]
[--ping <ping>] [--port-offset <portOffset>] [--queues <queues>]
[--replicated] [--require-login] [--role <role>] [--shared-store]
[--silent] [--slave] [--ssl-key <sslKey>]
[--ssl-key-password <sslKeyPassword>] [--ssl-trust <sslTrust>]
[--ssl-trust-password <sslTrustPassword>] [--use-client-auth]
[--user <user>] [--verbose] [--] <directory>
OPTIONS
--addresses <addresses>
Comma separated list of addresses
--aio
Sets the journal as asyncio.
--allow-anonymous
Enables anonymous configuration on security, opposite of
--require-login (Default: input)
--autocreate
Auto create addresses. (default: true)
--blocking
Block producers when address becomes full, opposite of --paging
(Default: false)
--cluster-password <clusterPassword>
The cluster password to use for clustering. (Default: input)
--cluster-user <clusterUser>
The cluster user to use for clustering. (Default: input)
--clustered
Enable clustering
--data <data>
Directory where ActiveMQ Data is used. Paths are relative to
artemis.instance
--default-port <defaultPort>
The port number to use for the main 'artemis' acceptor (Default:
61616)
--disable-persistence
Disable message persistence to the journal
--encoding <encoding>
The encoding that text files should use
--failover-on-shutdown
Valid for shared store: will shutdown trigger a failover? (Default:
false)
--force
Overwrite configuration at destination directory
--global-max-size <globalMaxSize>
Maximum amount of memory which message data may consume (Default:
Undefined, half of the system's memory)
--home <home>
Directory where ActiveMQ Artemis is installed
--host <host>
The host name of the broker (Default: 0.0.0.0 or input if clustered)
--http-host <httpHost>
The host name to use for embedded web server (Default: localhost)
--http-port <httpPort>
The port number to use for embedded web server (Default: 8161)
--java-options <javaOptions>
Extra java options to be passed to the profile
--mapped
Sets the journal as mapped.
--max-hops <maxHops>
Number of hops on the cluster configuration
--message-load-balancing <messageLoadBalancing>
Load balancing policy on cluster. [ON_DEMAND (default) | STRICT |
OFF]
--name <name>
The name of the broker (Default: same as host)
--nio
Sets the journal as nio.
--no-amqp-acceptor
Disable the AMQP specific acceptor.
--no-autocreate
Disable Auto create addresses.
--no-autotune
Disable auto tuning on the journal.
--no-fsync
Disable usage of fdatasync (channel.force(false) from java nio) on
the journal
--no-hornetq-acceptor
Disable the HornetQ specific acceptor.
--no-mqtt-acceptor
Disable the MQTT specific acceptor.
--no-stomp-acceptor
Disable the STOMP specific acceptor.
--no-web
Remove the web-server definition from bootstrap.xml
--paging
Page messages to disk when address becomes full, opposite of
--blocking (Default: true)
--password <password>
The user's password (Default: input)
--ping <ping>
A comma separated string to be passed on to the broker config as
network-check-list. The broker will shutdown when all these
addresses are unreachable.
--port-offset <portOffset>
Off sets the ports of every acceptor
--queues <queues>
Comma separated list of queues.
--replicated
Enable broker replication
--require-login
This will configure security to require user / password, opposite of
--allow-anonymous
--role <role>
The name for the role created (Default: amq)
--shared-store
Enable broker shared store
--silent
It will disable all the inputs, and it would make a best guess for
any required input
--slave
Valid for shared store or replication: this is a slave server?
--ssl-key <sslKey>
The key store path for embedded web server
--ssl-key-password <sslKeyPassword>
The key store password
--ssl-trust <sslTrust>
The trust store path in case of client authentication
--ssl-trust-password <sslTrustPassword>
The trust store password
--use-client-auth
If the embedded server requires client authentication
--user <user>
The username (Default: input)
--verbose
Adds more information on the execution
--
This option can be used to separate command-line options from the
list of argument, (useful when arguments might be mistaken for
command-line options
<directory>
The instance directory to hold the broker's configuration and data.
Path must be writable.
```
Some of these properties may be mandatory in certain configurations and the system may ask you for additional input.
```
./artemis create /usr/server
Creating ActiveMQ Artemis instance at: /user/server
--user: is a mandatory property!
Please provide the default username:
admin
--password: is mandatory with this configuration:
Please provide the default password:
--allow-anonymous | --require-login: is a mandatory property!
Allow anonymous access?, valid values are Y,N,True,False
y
Auto tuning journal ...
done! Your system can make 0.34 writes per millisecond, your journal-buffer-timeout will be 2956000
You can now start the broker by executing:
"/user/server/bin/artemis" run
Or you can run the broker in the background using:
"/user/server/bin/artemis-service" start
```
### Starting and Stopping a Broker Instance
Assuming you created the broker instance under `/var/lib/mybroker` all you need
to do start running the broker instance is execute:
/var/lib/mybroker/bin/artemis run
Now that the broker is running, you can optionally run some of the included
examples to verify the the broker is running properly.
To stop the Apache ActiveMQ Artemis instance you will use the same `artemis` script, but with
the `stop argument`. Example:
/var/lib/mybroker/bin/artemis stop
Please note that Apache ActiveMQ Artemis requires a Java 7 or later runtime to run.
By default the `etc/bootstrap.xml` configuration is
used. The configuration can be changed e.g. by running
`./artemis run -- xml:path/to/bootstrap.xml` or another
config of your choosing.
Environment variables are used to provide ease of changing ports, hosts and
data directories used and can be found in `etc/artemis.profile` on linux and
`etc\artemis.profile.cmd` on Windows.
## Server JVM settings
The run scripts set some JVM settings for tuning the garbage collection
policy and heap size. We recommend using a parallel garbage collection
algorithm to smooth out latency and minimise large GC pauses.
By default Apache ActiveMQ Artemis runs in a maximum of 1GiB of RAM. To increase the
memory settings change the `-Xms` and `-Xmx` memory settings as you
would for any Java program.
If you wish to add any more JVM arguments or tune the existing ones, the
run scripts are the place to do it.
## Pre-configured Options
The distribution contains several standard configuration sets for
running:
- Non clustered stand-alone.
- Clustered stand-alone
- Replicated stand-alone
- Shared-store stand-alone
You can of course create your own configuration and specify any
configuration when running the run script.
## Library Path
If you're using the [Asynchronous IO Journal](libaio.md) on Linux,
you need to specify `java.library.path` as a property on your Java
options. This is done automatically in the scripts.
If you don't specify `java.library.path` at your Java options then the
JVM will use the environment variable `LD_LIBRARY_PATH`.
You will need to make sure libaio is installed on Linux. For more information refer to the libaio chapter at
[Runtime Dependencies](libaio.html#runtime-dependencies)
## System properties
Apache ActiveMQ Artemis can take a system property on the command line for configuring
logging.
For more information on configuring logging, please see the section on
[Logging](logging.md).
## Configuration files
The configuration file used to bootstrap the server (e.g.
`bootstrap.xml` by default) references the specific broker configuration
files.
- `broker.xml`. This is the main ActiveMQ
configuration file. All the parameters in this file are
described [here](configuration-index.md)
It is also possible to use system property substitution in all the
configuration files. by replacing a value with the name of a system
property. Here is an example of this with a connector configuration:
<connector name="netty">tcp://${activemq.remoting.netty.host:localhost}:${activemq.remoting.netty.port:61616}</connector>
Here you can see we have replaced 2 values with system properties
`activemq.remoting.netty.host` and `activemq.remoting.netty.port`. These
values will be replaced by the value found in the system property if
there is one, if not they default back to localhost or 61616
respectively. It is also possible to not supply a default. i.e.
`${activemq.remoting.netty.host}`, however the system property *must* be
supplied in that case.
## Bootstrap File
The stand-alone server is basically a set of POJOs which are
instantiated by Airline commands.
The bootstrap file is very simple. Let's take a look at an example:
<broker xmlns="http://activemq.org/schema">
<file:core configuration="${activemq.home}/config/stand-alone/non-clustered/broker.xml"></core>
<basic-security/>
</broker>
- core - Instantiates a core server using the configuration file from the
`configuration` attribute. This is the main broker POJO necessary to
do all the real messaging work. In addition all JMS objects such as:
Queues, Topics and ConnectionFactory instances are configured here.
## The main configuration file.
The configuration for the Apache ActiveMQ Artemis core server is contained in
`broker.xml`. This is what the FileConfiguration bean
uses to configure the messaging server.
There are many attributes which you can configure Apache ActiveMQ Artemis. In most
cases the defaults will do fine, in fact every attribute can be
defaulted which means a file with a single empty `configuration` element
is a valid configuration file. The different configuration will be
explained throughout the manual or you can refer to the configuration
reference [here](configuration-index.md).
Windows Server
==============
On windows you will have the option to run ActiveMQ Artemis as a service.
Just use the following command to install it:
```
$ ./artemis-service.exe install
```
The create process should give you a hint of the available commands available for the artemis-service.exe