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(); }
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(); }
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); }
public void Start(StartContext context) { _reportListener.RunAsync(_cancellationTokenSource.Token).ContinueWith(HaveRun); _eventProcessor.RunAsync(_cancellationTokenSource.Token).ContinueWith(HaveRun); }