コード例 #1
0
 /// <inheritdoc />
 public override Task Append(Message message, MessageJournalCategory category,
                             CancellationToken cancellationToken = new CancellationToken())
 {
     CheckDisposed();
     return(_commandExecutor.Execute(
                () => base.Append(message, category, cancellationToken),
                cancellationToken));
 }
コード例 #2
0
 protected void AssertCategory(IEnumerable <MessageJournalEntry> journaledMessages,
                               MessageJournalCategory expectedCategory)
 {
     foreach (var journaledMessage in journaledMessages)
     {
         Assert.Equal(expectedCategory, journaledMessage.Category);
     }
 }
コード例 #3
0
        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));
        }
コード例 #4
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);
            }
        }
コード例 #5
0
        /// <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));
        }