public async Task Should_remove_poison_messages_from_the_queue()
        {
            SemaphoreSlim semaphore = new SemaphoreSlim(0, 1);

            _messageInvoker.WhenForAnyArgs(x => x.ProcessAsync(null, null))
            .Do(x => throw new InvalidOperationException());
            var token   = new CancellationTokenSource();
            var session = _fixture.OpenSession("QLInbound");
            await session.EnqueueAsync(new Message("Hello world"));

            await session.SaveChanges();

            _queueListener.PoisonMessageDetected += (o, e) => semaphore.Release();

            _queueListener.RetryAttempts = new[] { TimeSpan.FromMilliseconds(10), TimeSpan.FromMilliseconds(10), };
            _queueListener.Logger        = (level, name, message) => Debug.WriteLine(message);
            var t      = _queueListener.RunAsync(token.Token).ConfigureAwait(false).GetAwaiter();
            var actual = await semaphore.WaitAsync(10000);


            actual.Should().BeTrue();
            var row = _fixture.GetFirstRow("QLInbound");

            row.Should().BeEmpty();
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            IConfiguration config = new ConfigurationBuilder()
                                    .AddJsonFile("appsettings.json", true, true)
                                    .Build();

            //var conStr = config["ConnectionString"];
            //var queueName = config["QueueName"];
            var conStr =
                "Endpoint=sb://coderrlive.servicebus.windows.net/;SharedAccessKeyName=App;SharedAccessKey=zV623X84oZuyWEgn/PR21a72/snkxZA/r7PIMJYWEbY=";
            var queueName = "labb";

            var claims = new List <Claim>()
            {
                new Claim(ClaimTypes.NameIdentifier, "11"),
                new Claim(ClaimTypes.Name, "Arne"),
                new Claim(ClaimTypes.Email, "*****@*****.**")
            };
            var identity = new ClaimsIdentity(claims, "Mofo");
            var p        = new ClaimsPrincipal(identity);
            var queue    = new AzureMessageQueue(conStr, queueName)
            {
                MessageSerializer = new JsonMessageSerializer()
            };

            ClearQueue(queue);

            Console.WriteLine("Sending");
            using (var session = queue.BeginSession())
            {
                session.EnqueueAsync(p, new Message("Hello world!"));
                session.SaveChanges();
            }
            Console.WriteLine("SENT");

            QueueListener listener = new QueueListener(queue, queue, new ManualScopeFactory());

            listener.RunAsync(new CancellationToken()).GetAwaiter().GetResult();

            SendReceiveSingle(queue);
            Console.WriteLine("==============");
            SendReceiveBatch(queue);
            Console.WriteLine("==============");
            ReceiveFailure(queue);
            Console.WriteLine("==============");

            Console.WriteLine("Done, press ENTER to quit");
            Console.ReadLine();
        }
Esempio n. 3
0
        public async Task Should_be_able_to_handle_a_message_flow()
        {
            ManualResetEvent evt = new ManualResetEvent(false);
            var upgrade          = new LogAdminUpgrades(evt);
            var serviceProvider  = new ServiceCollection()
                                   .AddScoped <IMessageHandler <ActivateUser>, ActivateUserHandler>()
                                   .AddScoped <IMessageHandler <UserActivated>, UpgradeToAdminHandler>()
                                   .AddSingleton <IMessageHandler <UserBecameAdmin> >(upgrade)
                                   .AddScoped <IQueryHandler <FindUser, FindUserResult>, FindUserHandler>()
                                   .BuildServiceProvider();
            var scopeFactory  = new MicrosoftHandlerScopeFactory(serviceProvider);
            var inboundQueue  = _fixture.OpenQueue("inbound", false);
            var outboundQueue = _fixture.OpenQueue("outbound", false);
            var token         = new CancellationTokenSource();

            using (var session = inboundQueue.BeginSession())
            {
                await session.EnqueueAsync(new Message(new ActivateUser()));

                await session.SaveChanges();
            }
            var listener1 = new QueueListener(inboundQueue, outboundQueue, scopeFactory);

            listener1.MessageInvokerFactory = scope => new MessageInvoker(scope);
            listener1.Logger = (level, queue, msg) => Console.WriteLine($"{level} {queue} {msg}");
            var listener2 = new QueueListener(outboundQueue, outboundQueue, scopeFactory);

            listener2.MessageInvokerFactory = scope => new MessageInvoker(scope);
            listener2.Logger = (level, queue, msg) => Console.WriteLine($"{level} {queue} {msg}");

            var t1 = listener1.RunAsync(token.Token);
            var t2 = listener2.RunAsync(token.Token);


            token.Cancel();
            await Task.WhenAll(t1, t2);

            evt.WaitOne(500).Should().BeTrue();
        }
 public void Start(StartContext context)
 {
     _messagingQueueListenerTask = _messagingQueueListener.RunAsync(_cancelTokenSource.Token);
     _messagingQueueListenerTask.ContinueWith(OnListenerStopped);
 }
Esempio n. 5
0
 public void Start(StartContext context)
 {
     _reportListener.RunAsync(_cancellationTokenSource.Token).ContinueWith(HaveRun);
     _eventProcessor.RunAsync(_cancellationTokenSource.Token).ContinueWith(HaveRun);
 }