System Properties

The system configuration can be maintained/supplied in three ways.

Configuration file

The most commonly and preferred way is to have an axonserver.properties or axonserver.yml file which contains the desired configuration parameters. The location of the file should be the current working directory or alternatively can be placed within a "config" subdirectory (relative to the current working directory).

An important note - In case both files are detected by Axon Server, it will read from both. If a property is defined in both files, Axon Server uses the value specified in the properties file in the "config" directory.

Command-line

In case the server is being started using “java –jar …”, you can also supply individual configuration properties with “-Dproperty=value”

Environment variables

Configuration values can also be supplied using environment variables. The parameter name should be all in upper case with any kebab-case(-) / camelCase and snake_case() substituted with "_".

Recommendations

There are some recommendations around Axon Server EE/SE configuration,

  • Use “./axonserver.properties” for common settings.

  • Use “./config/axonserver.properties” for environment/node-specific overrides.

  • Use “-D” or environment variables for one-time settings.

Configuration properties

A list of all the configuration properties by area is denoted below.

Area Property Name Description Default Value

Node setup

axoniq.axonserver.name

Unique node name of the Axon Server node.

Hostname of the server

axoniq.axonserver.hostname

Hostname of the Axon Server node as communicated to clients.

Hostname of the server

axoniq.axonserver.internal-hostname

Hostname as communicated to other nodes of the cluster.

Hostname of the server

axoniq.axonserver.domain

Domain of this node as communicated to clients. Optional, if set will be appended to the hostname in communication with clients.

None

axoniq.axonserver.internal-domain

Domain as communicated to other nodes of the cluster.

"domain" value

axoniq.axonserver.port

gRPC port for the Axon Server node.

8124

server.port

HTTP port for the Axon Server console.

8024

axoniq.axonserver.internal-port

8224

axoniq.axonserver.tags

Key/value pairs of tags for tag based connections for clients.

None

axoniq.axonserver.devmode.enabled

Starts Axon Server in development mode, unlocking functionality not suited for production systems

false

axoniq.axonserver.set-web-socket-allowed-origins

Set WebSocket CORS Allowed Origins.

false

axoniq.axonserver.web-socket-allowed-origins

List of WebSocket CORS Allowed Origins.

File Locations

axoniq.axonserver.event.storage

Path where (regular) events are stored as segmented files on disk.

./data directory

axoniq.axonserver.snapshot.storage

Path where Snapshot Events are stored as segmented files on disk.

./data directory

axoniq.axonserver.controldb-path

Deprecated, use axoniq.axonserver.configdb-path instead

./data directory

axoniq.axonserver.configdb-path

Path where Axon Server’s control database (axonserver-configdb) is created.

./data directory

axoniq.axonserver.controldb-backup-location

Location where the control DB backups are created.

.

axoniq.axonserver.pid-file-location

Location where AxonServer creates its pid file.

.

axoniq.axonserver.replication.log-storage-folder

Directory where the transaction logs for replication are stored.

./log directory

axoniq.axonserver.accesscontrol.token-dir

Directory where token is stored on startup.

./security directory

axoniq.axonserver.enterprise.license-directory

Directory where the license file can be found.

.

File Names

axoniq.axonserver.event.bloom-index-suffix

File suffix for bloom files

.bloom

axoniq.axonserver.event.events-suffix

File suffix for events files.

.events

axoniq.axonserver.event.index-suffix

File suffix for index files

.index

axoniq.axonserver.event.new-index-suffix

File suffix for segment index files when using the jump skip index

.nindex

axoniq.axonserver.event.global-index-suffix

File suffix for global index files

.xref

axoniq.axonserver.snapshot.bloom-index-suffix

File suffix for snapshot bloom files

.sbloom

axoniq.axonserver.snapshot.events-suffix

File suffix for snapshot files

.snapshots

axoniq.axonserver.snapshot.index-suffix

File suffix for index files for snapshots

.sindex

replication.log-suffix

File suffix for transaction log files

.log

Event Store

axoniq.axonserver.event.bloom-index-fpp

False-positive percentage allowed for bloom index. Decreasing the value increases the size of the bloom indexes.

0.03

axoniq.axonserver.event.force-interval

Interval to force syncing files to disk (ms).

1000

axoniq.axonserver.event.primary-cleanup-delay

Delay to clear ByteBuffers from off-heap memory for writable segments.

15

axoniq.axonserver.event.secondary-cleanup-delay

Delay to clear ByteBuffers from off-heap memory for read-only segments.

15

axoniq.axonserver.event.segment-size

Size for new storage segments.

256Mb

axoniq.axonserver.event.sync-interval

Interval (ms) to check if there are files that are complete and can be closed.

1000

axoniq.axonserver.event.validation-segments

Number of segments to validate to on startup after unclean shutdown.

10

axoniq.axonserver.event.memory-mapped-segments

Number of recent segments that Axon Server keeps memory mapped.

5

axoniq.axonserver.event.events-per-segment-prefetch

Number of events to prefetch from disk when streaming events to the client.

50

axoniq.axonserver.snapshot.bloom-index-fpp

False-positive percentage allowed for bloom index for snapshots. Decreasing the value increases the size of the bloom indexes.

0.03

axoniq.axonserver.snapshot.force-interval

Interval to force syncing files to disk (ms).

1000

axoniq.axonserver.snapshot.primary-cleanup-delay

Delay to clear ByteBuffers from off-heap memory for writable segments.

15

axoniq.axonserver.snapshot.secondary-cleanup-delay

Delay to clear ByteBuffers from off-heap memory for read-only segments.

15

axoniq.axonserver.snapshot.segment-size

Size for new storage segments.

256Mb

axoniq.axonserver.snapshot.sync-interval

Interval (ms) to check if there are files that are complete and can be closed.

1000

axoniq.axonserver.snapshot.validation-segments

Number of snapshot segments to validate to on startup after unclean shutdown.

10

axoniq.axonserver.snapshot.memory-mapped-segments

Number of recent segments that Axon Server keeps memory mapped.

5

axoniq.axonserver.query.limit

200

axoniq.axonserver.new-permits-timeout

Timeout for event trackers while waiting for new permits.

120000

axoniq.axonserver.blacklisted-send-after

Force sending an event on an event tracker after this number of blacklisted events. Ensures that the token in the client application is updated.

1000

axoniq.axonserver.enterprise.default-index-type

(Since 4.4.7, EE only) Sets the default index type to be used for new contexts. Values are JUMP_SKIP_INDEX and BLOOM_FILTER_INDEX.

JUMP_SKIP_INDEX

axoniq.axonserver.read-sequence-validation-strategy

(Since 4.4.14) Sets how to handle validation errors while reading aggregates from the event store. Values are LOG and FAIL.

LOG

axoniq.axonserver.event.use-mmap-index

By default, AxonServer will determine whether to use memory mapped indexes for event files in the event store based on operating system and java version, in rare cases it may be useful to override the default

axoniq.axonserver.event.force-clean-mmap-index

Option to forcefully close unused memory mapped files instead of leaving the garbage collector do this, by default, AxonServer will determine this based on operating system and java version, in rare cases it may be useful to override the default

axoniq.axonserver.event.aggregate.prefetch

Ensures that backpressure signals from clients are split into batches. The initial request amount is {prefetch}*5, and subsequent (or replenishing) request amount is {prefetch}

5

axoniq.axonserver.event.aggregate.retry.attempts

Number of retries for reading event aggregate stream.

3

axoniq.axonserver.event.aggregate.retry.delay

Delay (ms) between retries for reading event aggregate stream.

100

axoniq.axonserver.event.leader.retry.attempts

Number of retries for finding an event store.

3

axoniq.axonserver.event.leader.retry.delay

Delay (ms) between retries for finding an event store.

100

axoniq.axonserver.event-processor-permits-check

Delay (ms) between checking if tracking event processors are waiting for new permits for a long time.

2000

axoniq.axonserver.check-sequence-nr-for-snapshots

Whether to check for invalid sequence numbers on appending a snapshot.

true

Logging

logging.level.package_name

Change the logging level for specific packages or classes. (for example logging.level.io.axoniq.axonserver = INFO)

WARN level for all packages

logging.file.name

File name where log entries should be written to. Names can be an exact location or relative to the current directory. (for example logging.file.name = messaging.log)

stdout

logging.path

Location where log files should be created. Names can be an exact location or relative to the current directory. (for example logging.path = /var/log)

Cluster setup

axoniq.axonserver.autocluster.first

For auto cluster option, set to the internal host name for the first node in the cluster.

None

axoniq.axonserver.autocluster.contexts

For auto cluster option, defines the list of contexts to connect to or create.

None

SSL (Axon Server - HTTP Port)

security.require-ssl

Determines whether the server has ssl enabled on the HTTP port.

false

server.ssl.key-store-type

Keystore type. (should be PKCS12)

None

server.ssl.key-store

Location of the keystore.

None

server.ssl.key-store-password

Password to access the keystore.

None

server.ssl.key-alias

Alias to be used to access the keystore.

None

SSL (Axon Server - gRPC Port)

axoniq.axonserver.ssl.enabled

Determines whether the server has ssl enabled on the gRPC port.

false

axoniq.axonserver.ssl.cert-chain-file

Location of the public certificate file.

None

axoniq.axonserver.ssl.private-key-file

Location of the private key file.

None

axoniq.axonserver.ssl.internal-cert-chain-file

None

axoniq.axonserver.ssl.internal-trust-manager-file

None

axoniq.axonserver.ssl.internal-private-key-file

None

Access Control

axoniq.axonserver.accesscontrol.enabled

Indicates that access control is enabled for the server.

false

axoniq.axonserver.accesscontrol.cache-ttl

Timeout for authenticated tokens.

300000

axoniq.axonserver.accesscontrol.internal-token

axoniq.axonserver.accesscontrol.token

axoniq.axonserver.accesscontrol.admin-token

axoniq.axonserver.accesscontrol.systemtokenfile

File containing a predefined system token.

Messaging (Between Clients and Axon Server)

axoniq.axonserver.max-message-size

Maximum size of a message to be sent to the node.

4 MB

axoniq.axonserver.force-connection-to-primary-or-messaging-node

Whether to force applications to connect to Primary nodes or Messaging Only nodes. When false, all nodes for a context are eligible to accept client connections.

true

axoniq.axonserver.instruction.result.timeout

Timeout in seconds for instruction results received via client server communication

10

Replication

axoniq.axonserver.replication.flow-buffer

Number of unconfirmed append entry messages that may be sent to peer.

1000

axoniq.axonserver.replication.force-interval

Interval to force writes to disk.

1000

axoniq.axonserver.replication.force-snapshot-on-join

Option to force new members to first receive a snapshot when they join a cluster.

true

axoniq.axonserver.replication.heartbeat-timeout

Leader sends a heartbeat to followers if it has not sent any other messages to a follower for this time (in ms)

300

axoniq.axonserver.replication.initial-election-timeout

Extra time (in ms) that follower waits initially before moving to candidate state.

0

axoniq.axonserver.replication.log-compaction-enabled

Deletes old log files when all the entries in the file are applied for more than log-retention-hours hour.

true

axoniq.axonserver.replication.log-retention-hours

Time to keep log files after all entries have been applied.

1

axoniq.axonserver.replication.max-election-timeout

Maximal time (in ms.) that a follower waits before moving to candidate state, if it has not received any messages from a leader. Also, time that leader waits before stepping down if it has not heard from the majority of its followers.

2500

axoniq.axonserver.replication.max-entries-per-batch

Maximum number of append entry messages sent to one peer before moving to the next.

10

axoniq.axonserver.replication.max-indexes-in-memory

Number of index files for replication segments that Axon Server keeps in memory

10

axoniq.axonserver.storage.event.max-indexes-in-memory

Number of index files for event segments that Axon Server keeps in memory

50

axoniq.axonserver.snapshot.max-indexes-in-memory

Number of index files for snapshot segments that Axon Server keeps in memory

50

axoniq.axonserver.replication.max-replication-round

The number of attempts the log replication process will do during the replication a snapshot until the follower is caught up.

10

axoniq.axonserver.replication.max-snapshot-chunks-per-batch

Maximum number of objects that can be sent in a single install snapshot message

1000

axoniq.axonserver.replication.min-active-backups

When active backup nodes are added to a context, this indicates on how many active backup nodes transactions must be confirmed before the transaction is ready for commit.

1

axoniq.axonserver.replication.min-election-timeout

Minimal time (in ms.) that a follower waits before moving to candidate state, if it has not received any messages from a leader.

1000

axoniq.axonserver.replication.primary-cleanup-delay

Windows only. Delay before forcing the primary segment file from memory when no longer in use.

5

axoniq.axonserver.replication.secondary-cleanup-delay

Windows only. Delay before forcing the other segment files from memory when no longer in use.

30

axoniq.axonserver.replication.segment-size

Size of a transaction log file.

16 MB

axoniq.axonserver.replication.snapshot-flow-buffer

Number of unconfirmed install snapshot messages that may be sent to peer.

50

axoniq.axonserver.replication.sync-interval

Interval to check for files that can be closed.

1000

axoniq.axonserver.replication.wait-for-leader-timeout

Timeout (in ms.) to wait for leader when requesting access to event store while leader change in progress, if not set defaults to maxElectionTimeout.

-1

axoniq.axonserver.context-validation.rate

Rate of checks to verify that for each context, the corresponding replication group is ready for handling client requests.

5000

axoniq.axonserver.context-validation.initial-delay

Initial delay of checks to verify that for each context, the corresponding replication group is ready for handling client requests.

5000

Keep Alive

axoniq.axonserver.keep-alive-time

Interval at which AxonServer will send timeout messages. Set to 0 to disable gRPC timeout checks.

2500

axoniq.axonserver.keep-alive-timeout

Timeout (in ms.) for keep alive messages on gRPC connections.

5000

axoniq.axonserver.min-keep-alive-time

Minimum keep alive interval (in ms.) accepted by this end of the gRPC connection.

1000

axoniq.axonserver.client-heartbeat-timeout

Timeout (in ms.) on application level heartbeat between client and Axon Server.

5000

axoniq.axonserver.client-heartbeat-check-initial-delay

Initial time delay (in ms.) before Axon Server checks for heartbeats from clients.

10000

axoniq.axonserver.client-heartbeat-check-rate

How often (in ms.) does Axon Server check for heartbeats from clients.

1000

axoniq.axonserver.heartbeat.enabled

If this is set Axon Server will respond to heartbeats from clients and send heartbeat

false

axoniq.axonserver.client-heartbeat-frequency

Frequency (ms) for sending heartbeats

500

axoniq.axonserver.client-heartbeat-initial-delay

Initial delay (ms) for sending heartbeats

5000

Maintenance Tasks

axoniq.axonserver.cluster.connection-check-delay

Delay before the first run of the connection checker (in ms.)

1000

axoniq.axonserver.cluster.connection-check-interval

Interval between each run of the connection checker (in ms.)

1000

axoniq.axonserver.cluster.connection-wait-time

Timeout for connection request (in ms.)

3000

axoniq.axonserver.cluster.metrics-distribute-delay

Delay before the first run of the metrics distributor (in ms.)

1000

axoniq.axonserver.cluster.metrics-distribute-interval

Interval between each run of the metrics distributor (in ms.)

1000

axoniq.axonserver.cluster.rebalance-delay

Delay before the first run of the rebalancer (in seconds)

7

axoniq.axonserver.cluster.rebalance-interval

Interval between each run of the rebalancer (in seconds)

15

axoniq.axonserver.cluster.auto-balancing

Automatic rebalancing of client connections enabled.

true

axoniq.axonserver.cluster.balancing-rate

Rate at which rebalancing is attempted.

15000

axoniq.axonserver.cache-close-rate

Interval (in ms.) at which to check for timed out queries and commands.

5000

axoniq.axonserver.processor-info-timeout

Time in ms after which collected event processor info expires.

30000

axoniq.axonserver.enterprise.context-configuration-sync-rate

Rate of updating the status of pending configuration changes in raft group members

3600000

Performance

axoniq.axonserver.event.max-bloom-filters-in-memory

Maximum number of bloom filters to keep in memory

100

axoniq.axonserver.event.max-indexes-in-memory

Maximum number of indexes to keep open in memory

50

axoniq.axonserver.event.read-buffer-size

Size of the buffer when reading from non-memory mapped files. (SE only)

32KB

axoniq.axonserver.snapshot.max-bloom-filters-in-memory

Maximum number of bloom filters to keep in memory

100

axoniq.axonserver.snapshot.max-indexes-in-memory

Maximum number of indexes to keep open in memory

50

axoniq.axonserver.snapshot.read-buffer-size

Size of the buffer when reading from non-memory mapped files. (SE only)

32KB

axoniq.axonserver.snapshot.use-mmap-index

By default, AxonServer will determine whether to use memory mapped indexes for snapshot files in the event store based on operating system and java version, in rare cases it may be useful to override the default

axoniq.axonserver.snapshot.force-clean-mmap-index

Option to forcefully close unused memory mapped files instead of leaving the garbage collector do this, by default, AxonServer will determine this based on operating system and java version, in rare cases it may be useful to override the default

axoniq.axonserver.executor-thread-count

Number of threads for executing incoming gRPC requests

16

axoniq.axonserver.cluster-executor-thread-count

Number of threads for executing incoming gRPC requests for internal communication

16

axoniq.axonserver.grpc-buffered-messages

The initial flow control setting for gRPC level messages. This is the number of messages that may be en-route before the sender stops emitting messages. This setting is per-request and only affects streaming requests or responses. Application-level flow control settings and buffer restriction settings are still in effect.

500

axoniq.axonserver.default-command-timeout

Timeout (in ms.) for commands sent to command handler

300000

axoniq.axonserver.default-query-timeout

Timeout (in ms.) for queries sent to query handler

300000

axoniq.axonserver.query.timeout

Timeout for ad-hoc queries

300000

axoniq.axonserver.websocket-update.rate

Settings to influence how often Axon Server (in ms.) sends updates to the dashboard for updated metrics or tracking event processor status.

1000

axoniq.axonserver.websocket-update.initial-delay

On start, it will wait "initial-delay" (in ms.) before sending any updates. After that it will check every "rate" milliseconds.

10000

axoniq.axonserver.command-cache-capacity

Limits the total number of pending commands on an Axon Server node. If it is set to 0, the limit is determined dynamically based on the maximum memory available to the JVM.

0

axoniq.axonserver.query-cache-capacity

Limits the total number of pending queries on an Axon Server node. If it is set to 0, the limit is determined dynamically based on the maximum memory available to the JVM.

0

axoniq.axonserver.messages.context-buffer-limit

(Since 4.4.8) Limits the total number of pending commands or queries per context on an Axon Server node. If less than 0, there is no limit.

-1

axoniq.axonserver.query-handler-selector

(Since 4.4.10) Determines how Axon Server distributes queries over instances of the same application. By default, it will favor instances that give a faster response. Set to "round-robin" to distribute in a round robin way. round-robin yields routing performance gains when many handlers are connected.

metrics

axoniq.axonserver.metrics-query-handler-selector.min-requests

(Since 4.4.10) Used in conjunction with the query-handler-selector set to "metric". Determines the minimum number of queries to be set to each instance of an application, before the router will distribute based on the metrics.

20

axoniq.axonserver.command-queue-capacity-per-client

Number of command requests for a specific command handling client that Axon Server will cache waiting for permits.

10000

axoniq.axonserver.query-queue-capacity-per-client

Number of query requests for a specific query handling client that Axon Server will cache waiting for permits.

10000

axoniq.axonserver.data-fetcher-threads

Number of threads that are allocated for doing longer running operations on the event store

24

axoniq.axonserver.data-writer-threads

Number of threads that are allocated for writing events to storage.

8

axoniq.axonserver.query-threads

Number of threads that are allocated for processing of external queries.

1

axoniq.axonserver.routing.metrics-collection-strategy

How to collect expensive metrics used for routing, full, local or none. Full (default) collects these metrics and shares them between AS nodes and allows AS to make the most informed routing decisions but may be taxing if many client applications are connected. local collects these metrics but does not share them between nodes. none disables collection of the most expensive metrics.

full

axoniq.axonserver.routing.disable-metadata-based-routing

Whether to disable routing based on metadata, even if apps and messages have metadata attached.

1

Recovery

axoniq.axonserver.recoveryfile

Start up with a recovery file to update node names in the controldb.

recovery.json

Plugins

axoniq.axonserver.plugins-enabled

enabled

true

axoniq.axonserver.plugin-package-directory

Directory where Axon Server stores the installed plugins. This directory must be writeable and persistent.

plugins/bundles

axoniq.axonserver.plugin-cache-directory

Cache directory fot the OSGi container. This directory must be writeable.

plugins/cache

axoniq.axonserver.plugin-clean-policy

Specifies if the OSGi container should clean up its cache directory on restart of the Axon Server node. Possible values are "none" and "onFirstInit".

onFirstInit

spring.servlet.multipart.max-file-size

Specifies the maximum size permitted for uploaded files.

10 MB

spring.servlet.multipart.max-request-size

Specifies the maximum size allowed for multipart/form-data requests.

10 MB