The Outbox feature requires persistence in order to store messages and enable deduplication.
Extra collections created by the RavenDB Outbox persistence
To keep track of duplicate messages, the RavenDB implementation of Outbox creates a special collection of documents called OutboxRecord
.
Deduplication record lifespan
The RavenDB persistence retains deduplication records for 7 days by default and runs the cleanup operation every minute.
These settings can be modified by specifying the desired values in the settings dictionary:
endpointConfiguration.SetTimeToKeepDeduplicationData(TimeSpan.FromDays(7));
endpointConfiguration.SetFrequencyToRunDeduplicationDataCleanup(TimeSpan.FromMinutes(1));
The cleanup task can be disabled by specifying a value of Timeout.
for SetFrequencyToRunDeduplicationDataCleanup
. This can be useful when an endpoint is scaled out and instances are competing to run the cleanup task.
Effect on RavenDB DocumentStore
When the Outbox is enabled, the default transport transaction level will be set so that the endpoint does not utilize distributed transactions. As a result of this, the RavenDB persistence will alter the RavenDB DocumentStore so that it also does not enlist in distributed transactions.
Although this will automatically occur when the endpoint initializes, it's still recommended to set disable RavenDB enlistment in DTC transactions in order to be explicit:
documentStore.EnlistInDistributedTransactions = false;
When the RavenDB Outbox is enabled none of the following properties, on the RavenDB DocumentStore, should be set. They are only used by RavenDB's DTC implementation:
ResourceManagerId
TransactionRecoveryStorage