/// <inheritdoc /> public override Task Append(Message message, MessageJournalCategory category, CancellationToken cancellationToken = new CancellationToken()) { CheckDisposed(); return(_commandExecutor.Execute( () => base.Append(message, category, cancellationToken), cancellationToken)); }
protected void AssertCategory(IEnumerable <MessageJournalEntry> journaledMessages, MessageJournalCategory expectedCategory) { foreach (var journaledMessage in journaledMessages) { Assert.Equal(expectedCategory, journaledMessage.Category); } }
public virtual Task Append(Message message, MessageJournalCategory category, CancellationToken cancellationToken = default(CancellationToken)) { lock (_syncRoot) { var position = new Position(_entries.Count); _entries.Add(new MessageJournalEntry(category, position, DateTime.UtcNow, message)); } return(Task.FromResult(0)); }
/// <inheritdoc /> public virtual async Task Append(Message message, MessageJournalCategory category, CancellationToken cancellationToken = new CancellationToken()) { if (message == null) { throw new ArgumentNullException(nameof(message)); } if (category == null) { throw new ArgumentNullException(nameof(category)); } var timestamp = message.GetJournalTimestamp(category); var connection = ConnectionProvider.GetConnection(); try { var headers = message.Headers; var commandBuilder = CommandBuilders.NewInsertJournaledMessageCommandBuilder(); commandBuilder.MessageId = headers.MessageId; commandBuilder.Timestamp = timestamp; commandBuilder.Category = category; commandBuilder.TopicName = headers.Topic; commandBuilder.MessageName = headers.MessageName; commandBuilder.Origination = headers.Origination?.WithTrailingSlash().ToString(); commandBuilder.Destination = headers.Destination?.WithTrailingSlash().ToString(); commandBuilder.ReplyTo = headers.ReplyTo?.ToString(); commandBuilder.RelatedTo = headers.RelatedTo; commandBuilder.ContentType = headers.ContentType; commandBuilder.Headers = SerializeHeaders(headers); commandBuilder.Content = message.Content; using (var scope = new TransactionScope(TransactionScopeOption.Required, TransactionScopeAsyncFlowOption.Enabled)) { using (var command = commandBuilder.CreateDbCommand(connection)) { await command.ExecuteNonQueryAsync(cancellationToken); } scope.Complete(); } } finally { ConnectionProvider.ReleaseConnection(connection); } }
/// <inheritdoc /> public Task Append(Message message, MessageJournalCategory category, CancellationToken cancellationToken = new CancellationToken()) { var entry = new MessageJournalEntryDocument { Timestamp = message.GetJournalTimestamp(category), Category = Normalize(category), Topic = Normalize(message.Headers.Topic), MessageId = Normalize(message.Headers.MessageId), MessageName = message.Headers.MessageName, Headers = message.Headers.ToDictionary(h => (string)h.Key, h => h.Value), Content = message.Content, Origination = Normalize(message.Headers.Origination), Destination = Normalize(message.Headers.Destination), RelatedTo = Normalize(message.Headers.RelatedTo) }; return(_messageJournalEntries .WithWriteConcern(WriteConcern.Acknowledged) .InsertOneAsync(entry, cancellationToken: cancellationToken)); }