示例#1
0
        public void EnsureNotDuplicateAsync()
        {
            var value           = new byte[] { 1, 2, 3 };
            var acceptor        = Substitute.For <IMessageAcceptor>();
            var lastMiddleware  = Substitute.For <IEventMiddleware <string> >();
            var middlewarequeue = new MiddlewareQueue <string>(_settings);

            middlewarequeue.AddMiddleware(_deduplicationMiddleware);
            middlewarequeue.AddMiddleware(lastMiddleware);

            middlewarequeue.RunMiddlewaresAsync(
                new BasicDeliverEventArgs
            {
                BasicProperties = new BasicProperties(),
                Body            = value
            },
                null,
                acceptor,
                CancellationToken.None)
            .GetAwaiter().GetResult();

            middlewarequeue.RunMiddlewaresAsync(
                new BasicDeliverEventArgs
            {
                BasicProperties = new BasicProperties(),
                Body            = value
            },
                null,
                acceptor,
                CancellationToken.None)
            .GetAwaiter().GetResult();

            lastMiddleware.Received(1).ProcessAsync(Arg.Any <IEventContext <string> >());
        }
示例#2
0
 public RabbitMqSubscriber(
     [NotNull] ILogger <RabbitMqSubscriber <TTopicModel> > logger,
     [NotNull] RabbitMqSubscriptionSettings settings)
 {
     _logger            = logger ?? throw new ArgumentNullException(nameof(logger));
     _settings          = settings ?? throw new ArgumentNullException(nameof(settings));
     _exchangeQueueName = _settings.GetQueueOrExchangeName();
     _middlewareQueue   = new MiddlewareQueue <TTopicModel>(settings);
 }
示例#3
0
        public void SuccessfulPath()
        {
            var acceptor        = Substitute.For <IMessageAcceptor>();
            var middlewarequeue = new MiddlewareQueue <string>(_settings);

            middlewarequeue.AddMiddleware(_middleware);
            middlewarequeue.AddMiddleware(new ActualHandlerMiddleware <string>(_ => Task.CompletedTask));

            middlewarequeue.RunMiddlewaresAsync(null, null, acceptor, CancellationToken.None).GetAwaiter().GetResult();

            acceptor.Received(1).Accept();
        }
示例#4
0
        public void ShouldResendToNextHandlerOnError()
        {
            var acceptor = Substitute.For <IMessageAcceptor>();
            var rootEventMiddlewareHandler = Substitute.For <IEventMiddleware <string> >();
            var middlewarequeue            = new MiddlewareQueue <string>(_settings);

            middlewarequeue.AddMiddleware(rootEventMiddlewareHandler);
            middlewarequeue.AddMiddleware(_middleware);
            middlewarequeue.AddMiddleware(new ActualHandlerMiddleware <string>(_ => throw new Exception()));

            middlewarequeue.RunMiddlewaresAsync(null, null, acceptor, CancellationToken.None).GetAwaiter().GetResult();

            rootEventMiddlewareHandler.Received(1).ProcessAsync(Arg.Any <IEventContext <string> >());
        }