/// <summary> /// Decorates transport to save messages into an outbox instead of sending them directly /// </summary> /// <param name="configurer"></param> /// <param name="outboxStorageConfigurer"></param> /// <param name="configureOptions"></param> /// <returns></returns> /// <exception cref="ArgumentNullException"></exception> public static RebusConfigurer Outbox(this RebusConfigurer configurer, Action <StandardConfigurer <IOutboxStorage> > outboxStorageConfigurer, Action <OutboxOptions> configureOptions = null) { configurer.Transport(t => { if (outboxStorageConfigurer == null) { throw new ArgumentNullException(nameof(outboxStorageConfigurer)); } outboxStorageConfigurer(t.OtherService <IOutboxStorage>()); var outboxOptions = new OutboxOptions(); configureOptions?.Invoke(outboxOptions); t.Decorate(c => { var transport = c.Get <ITransport>(); var outboxStorage = c.Get <IOutboxStorage>(); if (outboxOptions.RunMessagesProcessor) { var outboxMessagesProcessor = new OutboxMessagesProcessor( outboxOptions.MaxMessagesToRetrieve, transport, outboxStorage, c.Get <IBackoffStrategy>(), c.Get <IRebusLoggerFactory>(), c.Get <CancellationToken>()); outboxMessagesProcessor.Run(); } return(new OutboxTransportDecorator(transport, outboxStorage)); }); }); return(configurer); }
public OutboxMessageProcessorTests() { _transport = Substitute.For <ITransport>(); _outboxStorage = Substitute.For <IOutboxStorage>(); _backoffStrategy = Substitute.For <IBackoffStrategy>(); _busDisposalCancellationTokenSource = new CancellationTokenSource(); _processor = new OutboxMessagesProcessor(TopMessagesToRetrieve, _transport, _outboxStorage, _backoffStrategy, new NullLoggerFactory(), _busDisposalCancellationTokenSource.Token); }