protected override async Task OnStart(IMessageSession session) { using var connection = await connectionBuilder(CancellationToken.None); var dedupeManager = new DedupeManager(connection, table); await dedupeManager.PurgeItems(); }
public async Task Integration() { await using (var connection = Connection.OpenConnection()) { var manager = new DedupeManager(connection, "Deduplication"); await manager.Create(); } var endpoint = await StartEndpoint(); var hostBuilder = new WebHostBuilder(); hostBuilder.UseStartup <SampleStartup>(); using (var server = new TestServer(hostBuilder)) { using var client = server.CreateClient(); client.DefaultRequestHeaders.Referrer = new("http://TheReferrer"); var clientFormSender = new ClientFormSender(client); var guid = Guid.NewGuid(); var first = await SendAsync(clientFormSender, guid); Assert.Equal(202, first); var second = await SendAsync(clientFormSender, guid); Assert.Equal(208, second); } Thread.Sleep(3000); await endpoint.Stop(); Assert.Equal(1, count); }
async Task CreateTable() { #region CreateDeduplicationTable var manager = new DedupeManager(sqlConnection, "DeduplicationTable"); await manager.Create(); #endregion }
async Task DeleteTable() { #region DeleteDeduplicationTable var manager = new DedupeManager(sqlConnection, "DeduplicationTable"); await manager.Drop(); #endregion }
public static async Task Run() { using (var connection = await ConnectionHelpers.OpenConnection(SqlHelper.ConnectionString) .ConfigureAwait(false)) { var dedupeManager = new DedupeManager(connection, "Deduplication"); await dedupeManager.Create().ConfigureAwait(false); } }
async Task CreateTable() { #region CreateDeduplicationTable var queueManager = new DedupeManager(sqlConnection, "DeduplicationTable"); await queueManager.Create().ConfigureAwait(false); #endregion }
public async Task Install(string identity) { if (settings == null || settings.InstallerDisabled) { return; } using var connection = await settings.ConnectionBuilder(CancellationToken.None); var manager = new DedupeManager(connection, settings.Table); await manager.Create(); }
/// <summary> /// Begins the cleanup process. This will run in the background until <see cref="Stop"/> is called. /// </summary> public virtual void Start() { cleaner = new DedupeCleaner(async cancellation => { using var connection = await connectionBuilder(cancellation); var dedupeCleaner = new DedupeManager(connection, table); var expiry = DateTime.UtcNow.Subtract(expireWindow); await dedupeCleaner.CleanupItemsOlderThan(expiry, cancellation); }, criticalError: criticalError, frequencyToRunCleanup: frequencyToRunCleanup, timer: new AsyncTimer()); cleaner.Start(); }
public override async Task Invoke(IOutgoingPhysicalMessageContext context, Func <Task> next) { if (!DedupePipelineState.TryGet(context, out var dedupePipelineState)) { await next(); return; } var connectionTask = connectionBuilder(CancellationToken.None); if (context.Extensions.TryGet(out TransportTransaction _)) { throw new NotSupportedException("Deduplication is currently designed to be used from outside the NServiceBus pipeline. For example to dedup messages being sent from inside a web service endpoint."); } var messageId = GetMessageId(context); var transportTransaction = new TransportTransaction(); context.Extensions.Set(transportTransaction); await using var connection = await connectionTask; await using var transaction = (SqlTransaction) await connection.BeginTransactionAsync(); transportTransaction.Set(connection); transportTransaction.Set(transaction); var dedupeManager = new DedupeManager(transaction, table); var writeResult = await dedupeManager.WriteDedupRecord(messageId, dedupePipelineState.Context); dedupePipelineState.DedupeOutcome = writeResult.DedupeOutcome; dedupePipelineState.Context = writeResult.Context; if (dedupePipelineState.DedupeOutcome == DedupeOutcome.Deduplicated) { logger.Info($"Message deduplicated. MessageId: {messageId}"); return; } await next(); var commitResult = await dedupeManager.CommitWithDedupCheck(messageId, dedupePipelineState.Context); dedupePipelineState.DedupeOutcome = commitResult.DedupeOutcome; dedupePipelineState.Context = commitResult.Context; if (commitResult.DedupeOutcome == DedupeOutcome.Deduplicated) { logger.Info($"Message deduplicated. MessageId: {messageId}"); } }
public async Task Integration() { await using (var connection = Connection.OpenConnection()) { var manager = new DedupeManager(connection, "Deduplication"); await manager.Create(); await Installer.CreateTable(connection, "MessageAttachments"); } var resetEvent = new ManualResetEvent(false); var endpoint = await StartEndpoint(resetEvent); await SubmitMultipartForm(); if (!resetEvent.WaitOne(TimeSpan.FromSeconds(2))) { throw new("OutgoingMessage not received"); } await endpoint.Stop(); }