General Application Configuration |
---|
The remaining elements under the <app> element configure the operation of the application's AepEngine Code Block |
---|
| <app>
<messaging/>
<storage descriptor="${%FORWARDER_STOREDESCRIPTOR::native://.}" enabled="true"/>
<!-- General Engine Configuration -->
</app> |
|
<inboundEventMultiplexing | Configures the AepEngine's inbound event multiplexer. Configures the single AepEngine multiplexer thread that serializes processing of messages, timers, acks and other events for the application. |
<queueDepth> | The size of the feeder queue for the event multiplexer. Typically this value should be a power of 2. When not specified, the platform's default value for the multiplexer will be used. See <queueDepth> X DDL Override: x.apps.app.<appname>.inboundEventMultiplexing.queueDepth Constraints: positive integer |
<queueOfferStrategy> | Controls the offer strategy for threads publishing to the queue. When not specified, the platform's default value for the multiplexer will be used. See <queueOfferStrategy> X DDL Override: x.apps.app.<appname>.inboundEventMultiplexing.queueOfferStrategy Constraints: See QueueOfferStrategy Note |
---|
A value of SingleThreaded is almost never appropriate for an AepEngine because many threads dispatch events to an engine. |
|
<queueWaitStrategy> | Controls the offer strategy for threads publishing to the queue. When not specified, the platform's default value for the multiplexer will be used. See <queueWaitStrategy> X DDL Override: x.apps.app.<appname>.inboundEventMultiplexing.queueWaitStrategy Constraints: See QueueWaitStrategy |
<queueDrainerCpuAffinityMask> | Sets the CPU affinity mask to use for the drainer thread. The affinity string can either be a long that represents a mask of logical cpu, or a square bracket enclosed comma separated list enumerating the logical cpus. See <queueDrainerCpuAffinityMask> X DDL Override: x.apps.app.<appname>.inboundEventMultiplexing.queueDrainerCpuAffinityMask |
<queueFeedMaxConcurrency> | Sets the maximum number of threads that will feed the multiplexer's queue. See <queueFeedMaxConcurrency> Usage: Optional Default: 16 X DDL Override: x.apps.app.<appname>.inboundEventMultiplexing.queueFeedMaxConcurrency Constraints: positive integer |
</inboundEventMultiplexing> | |
<inboundMessageLogging | Configures inbound message logging for the engine. An inbound message logger logs inbound messages to a transaction log file. Inbound logging does not play a role in HA for the application, but can be useful for auditing purposes. |
policy | The inbound message logging policy for the application. See InboundMessageLoggingPolicy Usage: Required Default: "Default" X DDL Override: x.apps.app.<appname>.inboundMessageLogging.policy Constraints: Default | Off | UseDedicated |
failurePolicy | Status |
---|
colour | Green |
---|
title | Since 3.2 |
---|
|
The inbound message logging failure policy for the application.See InboundMessageLoggingFailurePolicy Usage: Optiona Default: StopEngine X DDL Override: x.apps.app.<appname>.inboundMessageLogging.failurePolicy Constraints: StopEngine| StopLogging |
<autoFlushSize> | In the absence of explicit flushes (e.g. flushOnCommit) of written entries, the size at which flush is automatically triggered for queued writes. If not set, the platform default (8192) is used. Usage: Optional Default: 8192 X DDL Override: x.apps.app.<appname>.inboundMessageLogging.autoFlushSize Constraints: positive integer |
<flushOnCommit> | Whether or not the logger should be flushed on commit. By default the logger buffers writes into an internal buffer and doesn't write to disk until that buffer has filled. Enabling flush on commit will flush the logger regardless of whether the buffer has filled. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.inboundMessageLogging.flushOnCommit Constraints: true | false |
<autoRepair> | Whether or not an attempt will be made to automatically repair a non-empty log on open by truncating malformed entries at the end of the log that are part of incomplete transactions. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.inboundMessageLogging.autoRepair Constraints: true | false |
<storeRoot> | Specifies the root folder in which the logger's transaction log files are located. Usage: Optional Default: ${NVROOT}/rdat X DDL Override: x.apps.app.<appname>.inboundMessageLogging.storeRoot Constraints: a file path (possibly relative to the working directory. Tip |
---|
If the expected value of of NVROOT on your target deployment host is not on the device where you want to place your transaction logs (e.g. slow or small disk), then consider making this a substitutable vlaue such as: <storeRoot>${myapp.storeroot}</storeRoot>, so that you can customize its location at runtime appropriate to the environment in which you are launching. |
|
<initialLogLength> | Sets the initial file size of logger's transaction log in gigabytes. Preallocating the transaction log can save costs in growing the file size over time since the operation of growing a log file may actually results in a write of file data + the metadata operation of updating the file size, and may also benefit from allocating contiguous sectors on disk. Usage: Optional Default: 1 (1Gb) X DDL Override: x.apps.app.<appname>.inboundMessageLogging.initialLogLength Constraints: positive float Tip |
---|
The log size is specified in Gb. For an initial size of less than 1 Gb, specify a float value. For example, a value of .01 would result in a preallocated size of ~10Mb, which can be useful for test environments. |
|
<zeroOutInitial> | Whether the log file should be explictly zeroed out (to force commit all disk pages) if newly created. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.inboundMessageLogging.zeroOutInitial Constraints: true | false |
<pageSize> | Sets the page size for the disk in bytes. The logger will use this as a hint in several areas to optimize its operation. Usage: Optional Default: 8192 X DDL Override: x.apps.app.<appname>.inboundMessageLogging.pageSize Constraints: positive int |
<detachedWrite | Configures whether or not logger writes are done by the committing thread or passed off to a detached writer thread. Offloading to a writer thread can increase application throughput but requires an extra processor core for the logger thread. |
enabled> | Can be set to true to enable detached logging for the logger. Usage: Required Default: false X DDL Override: x.apps.app.<appname>.inboundMessageLogging.detachedWrite.enabled Constraints: true | false |
<queueDepth> | The size of the feeder queue for the event multiplexer. Typically this value should be a power of 2. When not specified, the platform's default value for the multiplexer will be used. See <queueDepth> X DDL Override: x.apps.app.<appname>.inboundMessageLogging.detachedWrite.queueDepth Constraints: positive integer |
<queueOfferStrategy> | Controls the offer strategy for threads publishing to the queue. When not specified, the platform's default value for the multiplexer will be used. See <queueOfferStrategy> X DDL Override: x.apps.app.<appname>.inboundMessageLogging.detachedWrite.queueOfferStrategy Constraints: See QueueOfferStrategy |
<queueWaitStrategy> | Controls the offer strategy for threads publishing to the queue. When not specified, the platform's default value for the multiplexer will be used. See <queueWaitStrategy> X DDL Override: x.apps.app.<appname>.inboundMessageLogging.detachedWrite.queueWaitStrategy Constraints: See QueueWaitStrategy |
<queueDrainerCpuAffinityMask> | Sets the CPU affinity mask to use for the drainer thread. The affinity string can either be a long that represents a mask of logical cpu or a square bracket enclosed comma separated list enumerating the logical cpus. See <queueDrainerCpuAffinityMask> X DDL Override: x.apps.app.<appname>.inboundMessageLogging. detachedWrite.queueDrainerCpuAffinityMask |
<queueFeedMaxConcurrency> | Sets the maximum number of threads that will feed the multiplexer's queue. See <queueFeedMaxConcurrency> Usage: Optional Default: 16 X DDL Override: x.apps.app.<appname>.inboundMessageLogging. detachedWrite.queueFeedMaxConcurrency Constraints: positive integer |
</detachedWrite> </inboundMessageLogging> | End of application's inbound message logging properties. |
<outboundMessageLogging | Configures outbound message logging for the engine. An inbound message logger logs sent messages to a transaction log file. An outbound message log file does not play a role in HA for the application, but can be useful for auditing purposes. |
policy | The outbound message logging policy for the application. See OutboundMessageLoggingPolicy Usage: Required Default: "Default" X DDL Override: x.apps.app.<appname>.outboundMessageLogging.policy Constraints: Default | Off | UseDedicated |
failurePolicy | Status |
---|
colour | Green |
---|
title | Since 3.2 |
---|
|
The outbound message logging failure policy for the application.See OutboundMessageLoggingFailurePolicy Usage: Optiona Default: StopEngine X DDL Override: x.apps.app.<appname>.outboundMessageLogging.failurePolicy Constraints: StopEngine| StopLogging |
<autoFlushSize> | In the absence of explicit flushes (e.g. flushOnCommit) of written entries, the size at which flush is automatically triggered for queued writes. If not set, the platform default (8192) is used. Usage: Optional Default: 8192 X DDL Override: x.apps.app.<appname>.outboundMessageLogging.autoFlushSize Constraints: positive integer |
<flushOnCommit> | Whether or not the logger should be flushed on commit. By default the logger buffers writes into an internal buffer and doesn't write to disk until that buffer has filled. Enabling flush on commit will flush the logger regardless of whether the buffer has filled. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.outboundMessageLogging.flushOnCommit Constraints: true | false |
<autoRepair> | Whether or not an attempt will be made to automatically repair a non-empty log on open by truncating malformed entries at the end of the log that are part of incomplete transactions. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.outboundMessageLogging.autoRepair Constraints: true | false |
<storeRoot> | Specifies the root folder in which the logger's transaction log files are located. Usage: Optional Default: ${NVROOT}/rdat X DDL Override: x.apps.app.<appname>.outboundMessageLogging.storeRoot Constraints: a file path (possibly relative to the working directory. Tip |
---|
If the expected value of of NVROOT on your target deployment host is not on the device where you want to place your transaction logs (e.g. slow or small disk), then consider making this a substitutable vlaue such as: <storeRoot>${myapp.storeroot}</storeRoot>, so that you can customize its location at runtime appropriate to the environment in which you are launching. |
|
<initialLogLength> | Sets the initial file size of logger's transaction log in gigabytes. Preallocating the transaction log can save costs in growing the file size over time since the operation of growing a log file may actually results in a write of file data + the metadata operation of updating the file size, and may also benefit from allocating contiguous sectors on disk. Usage: Optional Default: 1 (1Gb) X DDL Override: x.apps.app.<appname>.outboundMessageLogging.initialLogLength Constraints: positive float Tip |
---|
The log size is specified in Gb. For an initial size of less than 1 Gb, specify a float value. for example a value of .01 would result in a preallocated size of ~10Mb, this can be useful for test environments. |
|
<zeroOutInitial> | Whether the log file should be explictly zeroed out (to force commit all disk pages) if newly created. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.outboundMessageLogging.zeroOutInitial Constraints: true | false |
<pageSize> | Sets the page size for the disk in bytes. The logger will use this as a hint in several areas to optimize its operation. Usage: Optional Default: 8192 X DDL Override: x.apps.app.<appname>.outboundMessageLogging.pageSize Constraints: positive float |
<detachedWrite | Configures whether or not logger writes are done by the committing thread or passed off to a detached writer thread. Offloading to a writer thread can increase application throughput but requires an extra processor core for the logger thread. |
enabled> | Can be set to true to enable detached logging for the logger. Usage: Required Default: false X DDL Override: x.apps.app.<appname>.outboundMessageLogging.detachedWrite.enabled Constraints: true | false |
<queueDepth> | The size of the feeder queue for the event multiplexer. Typically this value should be a power of 2. When not specified, the platform's default value for the multiplexer will be used. See <queueDepth> X DDL Override: x.apps.app.<appname>.outboundMessageLogging.detachedWrite.queueDepth Constraints: positive integer |
<queueOfferStrategy> | Controls the offer strategy for threads publishing to the queue. When not specified, the platform's default value for the multiplexer will be used. See <queueOfferStrategy> X DDL Override: x.apps.app.<appname>.outboundMessageLogging.detachedWrite.queueOfferStrategy Constraints: See QueueOfferStrategy |
<queueWaitStrategy> | Controls the offer strategy for threads publishing to the queue. When not specified, the platform's default value for the multiplexer will be used. See <queueWaitStrategy> X DDL Override: x.apps.app.<appname>.outboundMessageLogging.detachedWrite.queueWaitStrategy Constraints: See QueueWaitStrategy |
<queueDrainerCpuAffinityMask> | Sets the CPU affinity mask to use for the drainer thread. The affinity string can either be a long that represents a mask of logical cpu, or a square bracket enclosed comma separated list enumerating the logical cpus. See <queueDrainerCpuAffinityMask> X DDL Override: x.apps.app.<appname>.outboundMessageLogging. detachedWrite.queueDrainerCpuAffinityMask |
<queueFeedMaxConcurrency> | Sets the maximum number of threads that will feed the multiplexer's queue. See <queueFeedMaxConcurrency> Usage: Optional Default: 16 X DDL Override: x.apps.app.<appname>.outboundMessageLogging.detachedWrite.queueFeedMaxConcurrency Constraints: positive integer |
</detachedWrite> </outboundMessageLogging> | End of application's outbound message logging properties. |
<perTransactionStatsLogging
Anchor |
---|
| PerTransactionStatsLogging |
---|
| PerTransactionStatsLogging |
---|
|
| Configures per transaction stats binary logging for the engine. A per transaction stats logger logs per transaction stats to a transaction log when capturePerTransactionStats is enabled for an AEP engine. Per transaction stats logging is currently classified as an experimental feature
Status |
---|
| |
---|
colour | Green |
---|
title | Since 3.7 |
---|
|
|
policy | The per transaction stats logging policy for the application. See PerTransactionStatsLoggingPolicy Usage: Required Default: "Default" X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.policy Constraints: Default | Off | UseDedicated |
failurePolicy | The per transaction stats logging failure policy for the application.
See PerTransactionStatsLoggingFailurePolicy Usage: Optiona Default: StopEngine X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.failurePolicy Constraints: StopEngine| StopLogging |
<autoFlushSize> | In the absence of explicit flushes (e.g. flushOnCommit) of written entries, the size at which flush is automatically triggered for queued writes. If not set, the platform default (8192) is used. Usage: Optional Default: 8192 X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.autoFlushSize Constraints: positive integer |
<flushOnCommit> | Whether or not the logger should be flushed on commit. By default the logger buffers writes into an internal buffer and doesn't write to disk until that buffer has filled. Enabling flush on commit will flush the logger regardless of whether the buffer has filled. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.flushOnCommit Constraints: true | false |
<autoRepair> | Whether or not an attempt will be made to automatically repair a non-empty log on open by truncating malformed entries at the end of the log that are part of incomplete transactions. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.autoRepair Constraints: true | false |
<storeRoot> | Specifies the root folder in which the logger's transaction log files are located. Usage: Optional Default: ${NVROOT}/rdat X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.storeRoot Constraints: a file path (possibly relative to the working directory. Tip |
---|
If the expected value of of NVROOT on your target deployment host is not on the device where you want to place your transaction logs (e.g. slow or small disk), then consider making this a substitutable vlaue such as: <storeRoot>${myapp.storeroot}</storeRoot>, so that you can customize its location at runtime appropriate to the environment in which you are launching. |
|
<initialLogLength> | Sets the initial file size of logger's transaction log in gigabytes. Preallocating the transaction log can save costs in growing the file size over time since the operation of growing a log file may actually results in a write of file data + the metadata operation of updating the file size, and may also benefit from allocating contiguous sectors on disk. Usage: Optional Default: 1 (1Gb) X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.initialLogLength Constraints: positive float Tip |
---|
The log size is specified in Gb. For an initial size of less than 1 Gb, specify a float value. for example a value of .01 would result in a preallocated size of ~10Mb, this can be useful for test environments. |
|
<zeroOutInitial> | Whether the log file should be explictly zeroed out (to force commit all disk pages) if newly created. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.zeroOutInitial Constraints: true | false |
<pageSize> | Sets the page size for the disk in bytes. The logger will use this as a hint in several areas to optimize its operation. Usage: Optional Default: 8192 X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.pageSize Constraints: positive float |
<detachedWrite | Configures whether or not logger writes are done by the committing thread or passed off to a detached writer thread. Offloading to a writer thread can increase application throughput but requires an extra processor core for the logger thread. |
enabled> | Can be set to true to enable detached logging for the logger. Usage: Required Default: false X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.detachedWrite.enabled Constraints: true | false |
<queueDepth> | The size of the feeder queue for the event multiplexer. Typically this value should be a power of 2. When not specified, the platform's default value for the multiplexer will be used. See <queueDepth> X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.detachedWrite.queueDepth Constraints: positive integer |
<queueOfferStrategy> | Controls the offer strategy for threads publishing to the queue. When not specified, the platform's default value for the multiplexer will be used. See <queueOfferStrategy> X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.detachedWrite.queueOfferStrategy Constraints: See QueueOfferStrategy |
<queueWaitStrategy> | Controls the offer strategy for threads publishing to the queue. When not specified, the platform's default value for the multiplexer will be used. See <queueWaitStrategy> X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging.detachedWrite.queueWaitStrategy Constraints: See QueueWaitStrategy |
<queueDrainerCpuAffinityMask> | Sets the CPU affinity mask to use for the drainer thread. The affinity string can either be a long that represents a mask of logical cpu, or a square bracket enclosed comma separated list enumerating the logical cpus. See <queueDrainerCpuAffinityMask> X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging. detachedWrite.queueDrainerCpuAffinityMask |
<queueFeedMaxConcurrency> | Sets the maximum number of threads that will feed the multiplexer's queue. See <queueFeedMaxConcurrency> Usage: Optional Default: 16 X DDL Override: x.apps.app.<appname>.perTransactionStatsLogging. detachedWrite.queueFeedMaxConcurrency Constraints: positive integer |
</detachedWrite> </perTransactionStatsLogging> | End of application's per transaction stats logging properties. |
| |
<startupExpectations | Specifies expectations that must be met on application startup. Unmet startup expectations will prevent the application from starting, ensuring that operational conditions are met. Usage: Optional |
<role> | Checks the HA Role of the application on startup. The role of an application is defined by the underlying role of its store. If the application has no store configured, its role will be 'Primary'. See StoreBindingRoleExpectation Usage: Optional X DDL Override: x.apps.app.<appname>.startupExpectations.role Constraints: Primary | Backup | None |
<logEmptiness> | Enforces log emptiness expectations at startup. See LogEmptinessExpectation Usage: Optional Default: None X DDL Override: x.apps.app.<appname>.startupExpectations.logEmptiness Constraints: None | Empty | NotEmpty |
</startupExpectations> | |
<messageHandlingPolicy> | Specifies the application's message handling policy. It is rare that an application would want to set anything other than 'Normal' for the message handling policy outside of a diagnostic or debug context. See MessageHandlingPolicy Usage: Optional Default: Normal X DDL Override: x.apps.app.<appname>.messageHandlingPolicy Constraints: Normal | Noop | Discard |
<messagingStartFailPolicy> | Status |
---|
colour | Green |
---|
title | since 3.7 |
---|
|
Specifies an engine's messaging start fail policy. The messaging start operation establishes the bindings to the various buses that an engine is configured to bind to. This enumeration enumerates the policy that determines the conditions under which a messaging start operation is considered to have failed. The NeverFail option causes a start operation to be considered successful as long as all bind attempts do not result in permanent exceptions (a permanent exception reported by a bind attempt causes the bind operation to not be retried while a non-permanent exception causes the bind attempt to be periodically retried). In other words, the NeverFail option causes a messaging start operation to be reported as successful as long as at least one bind attempt was successful or failed with a non-permanent exception. Note |
---|
Using a policy which does not shutdown the engine if a binding fails requires that the application is coded such that it can handle message channels being down during messaging. Bus implementations often have their own retry logic built into connection establishment, so it is worth bearing in mind that a failure to establish a connection may not be resolved in a timely fashion by subsequent retries made by the engine. |
See MessagingStartFailPolicy Usage: Optional Default: FailIfOneBindingFails X DDL Override: x.apps.app.<appname>.messageStartFailPolicy Constraints: Normal | FailIfOneBindingFails | FailIfAllBindingsFail |
<messageBusBindingFailPolicy> | Status |
---|
colour | Green |
---|
title | since 3.7 |
---|
|
Specifies the policy that determines what action an engine takes when a message bus binding fails. Note |
---|
Using a policy which does not shutdown the engine if a binding fails requires that the application is coded such that it can handle message channels being down during messaging. Bus implementations often have their own retry logic built into to perform transparent reconnect, so it is worth bearing in mind that a failure to establish a connection may not be resolved in a timely fashion by subsequent retries made by the engine. |
See MessageBusBindingFailPolicy Usage: Optional Default: FailIfAnyBindingFails X DDL Override: x.apps.app.<appname>.messageBusBindingFailPolicy Constraints: Reconnect | FailIfAnyBindingFails |
<replicationPolicy> | Specifies the application's replication policy. The replication policy controls how messages are replicated to backup members (or disk). In most cases an application should specify a policy of Pipelined. Specifying the wrong value for this property can compromise recovery and cause message loss or duplication. See ReplicationPolicy Usage: Optional Default: Pipelined X DDL Override: x.apps.app.<appname>.replicationPolicy Constraints: Pipelined | Asynchronous |
<messageSendPolicy> | Enumerates an application's AepEngine's outbound message send policies. The message send policy controls at what point during transaction commit processing that application sent messages are transmitted out of the application. In most cases, an application should specify a policy of Pipelined. Specifying the wrong value for this property can compromise recovery and cause message loss or duplication. See MessageSendPolicy Usage: Optional Default: ReplicateBeforeSend X DDL Override: x.apps.app.<appname>.messageSendPolicy Constraints: ReplicateBeforeSend| SendBeforeReplicate | Noop |
<inboundEventAcknowledgementPolicy> | Enumerates an engine's inbound event acknowledgement policy. The general contract of an AepEngine is that it cannot acknowledge up stream events (such as message events) in a transaction until such as the transaction has been stabilized to the point that in the event of a failure the message will not be lost. When the engine is not configured with a store this property has no effect and events are acknowledged when the entire transaction is committed (e.g. when downstream acknowledgements are received.) See InboundEventAcknowledgementPolicy Usage: Optional Default: Default X DDL Override: x.apps.app.<appname>.inboundEventAcknowledgementPolicy Constraints: Default | OnSendStability | OnStoreStability |
appExceptionHandlingPolicy> | Set an engine's application exception handling policy, using which an engine determines how to handle unchecked exceptions thrown by an application handler. See AppExceptionHandlingPolicy Usage: Optional Default: RollbackAndStop X DDL Override: x.apps.app.<appname>.appExceptionHandlingPolicy Constraints: RollbackAndStop | QuarantineAndStop | LogExceptionAndContinue Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<quarantineChannel> | Set an engine's quarantine channel. Sets the channel on which quarantined messages are transmitted. It must take the form of channelName@busName This applies when the application throws an exception and the application exception policy is configured to be 'quarantine and stop' i.e. QuarantineAndStop Usage: Optional Default: null X DDL Override: x.apps.app.<appname>.quarantineChannel Constraints: (.)+@(.)+ Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<quarantineMessageKey> | Set an engine's quarantine message key. Used to explicitly set the message key to be associated with outbound quarantine messages. If the key is set using this method, the sending of the quarantine message will bypass the dynamic key resolution machinery. Usage: Optional Default: null X DDL Override: x.apps.app.<appname>.quarantineMessageKey Constraints: valid channel key Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<messageSend ExceptionHandlingPolicy> | The policy used by an application's AepEngine to determine how to handle unchecked exceptions thrown on message sends. Note that policy covers only the send of the message through the underlying bus binding during transaction commit. In particular, It does not cover: - Exceptions thrown from send calls made by the application during message processing. That policy must be set via the AppExceptionHandlingPolicy.
- Exceptions that result from processing of acknowledgements for guaranteed message traffic from the message bus which count as stability failures and are deemed fatal.
See MessageSendExceptionHandlingPolicy Usage: Optional Default: TreatAsStabilityFailure X DDL Override: x.apps.app.<appname>.messageSendExceptionHandlingPolicy Constraints: TreatAsStabilityFailure | LogExceptionAndContinue |
<replicationPolicy> | Specifies the application's replication policy.
In most cases an application should specify a policy of Pipelined. Specifying the wrong value for this property can compromise recovery and cause message loss or duplication. See ReplicationPolicy Usage: Optional Default: Pipelined X DDL Override: x.apps.app.<appname>.replicationHandlingPolicy Constraints: Pipelined | Asynchronous |
<adaptiveCommitBatchCeiling> | Set the application's AepEngine's adaptive commit batch ceiling. The adaptive commit batch ceiling controls the maximum number of inbound messages to group into a single transaction which can improve throughput. A value less than or equal to 1 disables adaptive commit. Usage: Optional Default: TreatAsStabilityFailure X DDL Override: x.apps.app.<appname>.adaptiveCommitBatchCeiling Constraints: TreatAsStabilityFailure | LogExceptionAndContinue Note |
---|
Adaptive commit cannot be used if transaction commit suspension is enabled. |
|
<enableTransactionCommitSuspension> | Sets whether transaction commit suspension is enabled or disabled. Transaction commit suspension is an experimental feature that allows an application to temporarily suspend commit of a transaction. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.enableTransactionCommitSuspension Constraints: true | false Note |
---|
TransactionCommitSuspension is currently an experimental feature. It is not supported for production use.
It cannot be used with: - clustered engines.
- engines using StateReplication
- engines using adpative commit batching.
|
|
<dispatchTransactionStageEvents> | Sets whether transaction stage events are emitted by the application's AepEngine. Controls whether or not AepTransactionStageEvent are emitted by the application's engine. An AepTransactionStageEvent is used by a user to suspend a transaction. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.dispatchTransactionStageEvents Constraints: true | false Note |
---|
TransactionCommitSuspension is currently an experimental feature. It is not supported for production use. Because AepTransactionStageEvent are only useful for transaction commit suspension, this property should not be enabled unless the this feature is being tested.
It cannot be used with: - clustered engines.
- engines using StateReplication
- engines using adpative commit batching.
|
|
<replicateSolicitedSends> | Sets whether or not to replicate solicited sends to a backup. This parameter governs whether solicited sends (sends triggered by the processing of inbound messages) performed on clustered State Replication engines will be replicated or not. This setting has no effect on Event Sourced engines or engines that are not clustered.
Usage: Optional Default: true X DDL Override: x.apps.app.<appname>.replicateSolicitedSends Constraints: true | false Note |
---|
This parameter should be changed with extreme caution. The act of disabling replication of outbound messages will likely result in a loss of outbound messages in the event of a fail over. |
|
<replicateUnsolicitedSends> | Set whether to replicate unsolicited sends. This parameter governs whether unsolicited sends performed on clustered engines will be replicated or not. This setting has no effect on engines that are not clustered. An unsolicited send is a send done outside of a event handler via an AepEngine.send method. Because unsolicited sends aren't part of an engine's transactional message processing, they are not considered to be part of the application's HA state. To treat unsolicited sends as part of an application's HA state, see sequenceUnsolicitedSendsWithSolicitedSends. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.replicateUnsolicitedSends Constraints: true | false |
<sequenceUnsolicitedSends> | Set whether to sequence unsolicited sends. By default, unsolicited sends are sent with a sequence number of 0. Specifying true in this parameter will cause sequence numbers to also be attached to unsolicited sends. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.sequenceUnsolicitedSends Constraints: true | false Note |
---|
Be careful about attaching sequence numbers to unsolicited sends, especially if the application is going to be doing both unsolicited and solicited sends concurrently, since that can cause messages to be sent on the wire in a sequence different from the sequence in which sequence numbers were assigned to the message thus causing legitimate messages to be dropped due to incorrect duplicate determination. For such applications, use sequenceSolicitedWithUnsolicitedSends instead to ensure that not only are unsolicited sends sequenced but that they are also correctly sequenced vis-a-vis solicited sends. |
|
<sequenceUnsolicitedSends WithSolicitedSends> | Set whether to sequence unsolicited sends with solicited sends. This parameter is applicable for applications performing concurrent solicited and unsolicited sends and want the unsolicited sends to be sequenced. Setting this parameter ensures that unsolicited and solicited sends are sequenced on the wire in the same order in which the sequence numbers were attached to the messages. In effect, this causes an unsolicited send to be injected into the underlying engine's transactional event processing stream promoting it to a transaction event. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.sequenceUnsolicitedSendsWithSolicitedSends Constraints: true | false |
<disposeOnSend> | Set whether or not the engine disposes sent messages. If set, then the AepEngine.sendMessage method will dispose a message after it has been sent. This means that the caller must not hold onto or reference a message beyond the call to the send message method. If unset, then a zero garbage application must call dispose on each sent message to ensure it is returned to its pool. Usage: Optional Default: true X DDL Override: x.apps.app.<appname>.disposeOnSend Constraints: true | false |
<clusterHeartbeatInterval> | Sets the cluster heartbeat interval for the application in milliseconds.
When replicating message and state to its cluster peers, the AepEngine piggybacks internal state, such as outbound message acknowledgements and other internal control data. Setting a cluster heartbeat interval can be useful for low throughput applications to keep the backup in closer sync to the primary. The most common use case for setting this would be to reduce the number of in doubt messages outstanding in backup peers to a window. A value of 0 (default) disables the cluster heartbeat interval Usage: Optional Default: 0 X DDL Override: x.apps.app.<appname>.clusterHeartbeatInterval Constraints: non negative integer |
<administrative> | Marks the application as an 'administrative' application.
Marking an application as 'administrative' excludes it from being included in latency or throughput optimizations that demand system resources. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.administrative Constraints: true | false |
<stuckAlertEventThreshold> | Sets the threshold, in seconds, after which an AepStuckAlertEvent is dispatched to the application's IAepAsynchronousEventHandler. An AepStuckAlertEvent event is intended to alert that the engine's transaction pipeline is "stuck" i.e. there are one or more transaction commits in the pipeline and the event multiplexer thread is not processing any events. For example, the event multiplexer thread could be flow controlled on the replication TCP connection due to an issue in the backup or could be spinning in a loop in the business logic due to a bug in a business logic handler. See Stuck Engine Alerts for more information Usage: Optional Default: 0 X DDL Override: x.apps.app.<appname>.stuckAlertEventThreshold Constraints: non negative integer |
| Set whether the application's engine should perform duplicate checking. When duplicate checking is enabled, received messages that are deemed duplicates are discarded by the application's engine. A message is considered to be a duplicate under the following circumstances: - The message has a sequence number that is greater than 1.
- The sequence number is less than the last received sequence number for the flowId and senderId in the message.
- A sequence number of 1 is interpreted as a restart of a messaging stream.
- A value of 0 or less means the message is not sequenced and will ignored for duplicate checks.
Sequence id assignment by an AepEngine - MessageSender: Is assigned by the AepEngine using the hashcode of the engine name.
- MessageFlow: Leaves flow unset as 0 (default). At present it is not recommended for applications to set a flow.
- MessageSequenceNumber: Set for each send from a event handler by incrementing a sequence number or for each unsolicited send (outside of a event handler) when sequenceUnsolicitedSends is true.
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
Usage: Optional Default: true X DDL Override: x.apps.app.<appname>.performDuplicateChecking Constraints: boolean |
<setOutboundSequenceNumbers> | Disables setting of sequence numbers outbound messages. The setting of sequence numbers in outbound messages comes at a very slight performance penalty that may not be tolerated by ultra low latency applications. This property can be used to switch off the setting of sequence numbers in oubound messages for such performance critical applications. However, note that this effectively disables checking for duplicates for messages sent by such a configured engine by downstream apps. Usage: Optional Default: true X DDL Override: x.apps.app.<appname>.setOutboundSequenceNumbers Constraints: boolean |
<syncInjectedMessages> | Sets whether MessageView.sync() is called during AepEngine.injectMessage.
When using Event Sourcing or inbound message logging injected messages injected messages may be replicated and/or persisted to disk. To do so means that the contents of the message must be synced. By doing sync() during the inject call, it can save the engine's processor thread cpu cycles. Status |
---|
colour | Green |
---|
title | since 3.7 |
---|
|
Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.syncInjectedMessages Constraints: boolean |
| Set whether the engine checks that initial transactions are not missing during recovery or replication. This parameter is only applicable to event sourced engines. It is not recommended that you disable this check unless recommended by Neeve Support.
Usage: Optional Default: true X DDL Override: x.apps.app.<appname>.performMidstreamInitializationValidation Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<enableSequenceNumberTrace> | Enables diagnostic trace logging related to message sequencing. Enabling this trace can assist in diagnosing issues related to the loss, duplicate or out of order events. When enabled, trace will be emitted at debug level (TRACE level for SLF4J) to the logger named 'nv.aep.sno'. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.enableSequenceNumberTrace Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<enableEventTrace> | Enables diagnostic trace logging of events received and dispatched by an engine. Enabling this trace is useful in determining the sequence of events processed by the engine. When enabled, trace will be emitted at debug level (TRACE level for SLF4J) to the logger named 'nv.aep.event'. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.enableEventTrace Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<enableTransactionTrace> | Enables diagnostic trace logging related to transactions processed by an engine. Enabling this trace is useful in determining the relative sequencing and timing of transaction commits as the commits are executed by the engine. When enabled, trace will be emitted at debug level (TRACE level for SLF4J) to the logger named 'nv.aep.txn'. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.enableTransactionTrace Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<enableScheduleTrace> | Enable diagnostic trace logging related to schedules (timers) managed by an engine. Enabling this trace is useful for diagnosing issues related to engine timer execution and scheduling. When enabled, trace will be emitted at debug level (TRACE level for SLF4J) to the logger named 'nv.aep.sched'. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.enableScheduleTrace Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<enableMessageTrace> | Enables diagnostic trace logging for messages as they pass through the engine. Enabling this trace is useful for tracing the contents of messages at different stages of execution within the engine. When enabled, trace will be emitted at debug level (TRACE level for SLF4J) to the logger named 'nv.aep.msg'. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.enableMessageTrace Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<messageTraceInJson> | Sets whether messages are traced in Json or toString format. When enabled, messages will be printed in Json format, otherwise message will be traced using its toString method. This parameter is only applicable if message trace is enabled. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.messageTraceInJson Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<messageTraceJsonStyle> | Sets the styling for Json formatted message trace. This parameter is only applicable if message trace in Json is enabled. Valid options are: - Default: Specifies the default jackson pretty printer should be used (DefaultPrettyPrinter)
- PrettyPrint: Same as default.
- Minimal: A minimal single line pretty printer.
- SingleLine: A minimal single line pretty printer. Same as minimal, but with a space after the colon between objects field and value separator (e.g. "intField": 1 vs "intField":1)
Usage: Optional Default: Default X DDL Override: x.apps.app.<appname>.messageTraceJsonStyle Constraints: Default | PrettyPrint | Minimal | SingleLine
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<messageTraceFilterUnsetFields> | Sets whether unset fields are filtered for json formatted objects when json message tracing is enabled. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.messageTraceFilterUnsetFields Constraints: true | false |
| Sets whether metadata, payload or both will be traced when message tracing is enabled. Valid Options are: - On: Specifies that metadata should be displated along with the message payload.
- Off: Specifies that only the message payload should be displayed.
- Only: Specifies that only the metadata should be displayed.
Usage: Optional Default: On X DDL Override: x.apps.app.<appname>.messageTraceMetadataDisplayPolicy Constraints: On | Off | Only
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<maxEnvironmentProviders> | Sets the maximum number of environment providers that can be registered with the engine. Usage: Optional Default: 256 X DDL Override: x.apps.app.<appname>.maxEnvironmentProviders Constraints: positive integer.
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<enableSendCommitCompleteSequenceAlerts> | Set whether or not to enable out of order send commit completion detection. When enabled, the engine will check that stability events (acknowledgements) from the underlying messaging provider are received in an ordered fashion. If acknowledgements are received out of order, then the engine will dispatch appropriate alerts. This check can introduce overhead and is useful in situations in which the message bus is expected to return acks in an ordered fashion. A raised alert is not necessarily an indicator of a problem as the engine will ensure that transactions are completed out in order. In general it is not recommended that this property be enabled unless diagnosing an issue where a bus binding appears not to be acknowledging messages.
Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.enableSendCommitCompleteSequenceAlerts Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<captureMessageTypeStats> | Sets whether statistics are additionally recorded ona per message type basis. Collection of message type specific statistics records counts and rates per type as well as message processing time statistics for each message which can be useful in finding particular handlers that have high execution times. Enabling message type stats introduces a fair amount of overhead. Before running with this in production be sure to gauge its performance impact for your application to determine whether or not the overhead is worth the additional visibility.
Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.captureMessageTypeStats Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<captureTransactionLatencyStats> | Sets whether or not the engine records transaction latency stats. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.captureTransactionLatencyStats Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<capturePerTransactionStats> | Sets whether or not the engine records per transaction stats. Unlike captureTransactionLatencyStats which records histographical latencies, this setting is much more expensive in that it records and emits individual timestamps for operations that occured in the transaction including store commit timestamps and individual message timestamps. In most cases the capturing this level of detail is not worth the overhead it incurs, as the histographical latency captured via captureTransactionLatencyStats is usually sufficient for inferring timings within a given sampling interval. However, in cases where it is critical to determine the exact timings of transaction processing to better understand product behavior it can be useful. If used in production (which is not recommended), applications should undergo stress testing under maximum peak load to determine the impact of enabling collection of per transaction stats. Tip |
---|
You must also configure perTransactionStatsLogging to write the captured stats to a transaction log on disk. At this time per transaction stats are not emitted via trace loggers or over a messaging bus. |
Per transaction stats collection is currently classified as an experimental feature. It is subject to change without notice.
Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.capturePerTransactionStats Constraints: true | false
Status |
---|
| |
---|
colour | Green |
---|
title | Since 3.7 |
---|
|
|
<captureEventLatencyStats> | Sets whether or not the engine records event latency stats (such as the amount of time of events spent in its input queue). Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.captureEventLatencyStats Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<replicateInParallel> | Enables parallel replication. When parallel replication is enabled, the engine replicates inbound messages to the cluster backups in parallel with the processing of the message by the message handler. This parameter only applies to Event Sourced engines. This parameter is particularly useful for Event Sourced applications that have higher message processing times because in this case it may be possible to replicate the message prior to completion of the message handler. Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.replicateInParallel Constraints: true | false
Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
<preserveChannelJoinsOnStop> | Sets whether or not to preserve joined channels when the engine stops normally. By default, when an engine is stopped without an error bus channels that were 'joined' will be 'left', meaning that any subscriptions or interests created by the message bus will be unsubscribed or unregistered. Setting this value to true causes the engine to preserve channel interest even on a clean shutdown. Note that this property has no effect for the case where an engine shuts down with an error (e.g. AepEngine.stop(Exception) with a non-null cause. In this case channel joins are left intact allowing a backup to take over. Note that this behavior can be overridden programmatically on a case by case basis by a handler for AepEngineStoppingEvent by setting AepEngineStoppingEvent.setPreserveChannelJoins(boolean). Usage: Optional Default: false X DDL Override: x.apps.app.<appname>.preserveChannelJoinsOnStop Constraints: true | false Status |
---|
colour | Green |
---|
title | Since 3.4 |
---|
|
|
</app><apps> | |