public async Task ShouldReceiveMessage_RejectAsync() { receiverSettings.Queue = Guid.NewGuid().ToString(); List <Message> messages = new List <Message>(); host.RegisterMessageProcessor(receiverSettings.Queue + "TestEvent", new TestMessageProcessor(50, messages)); linkProcessor = new TestLinkProcessor(); host.RegisterLinkProcessor(linkProcessor); int count = 1; publisterSettings.Topic = receiverSettings.Queue; var publisher = new DomainEventPublisher(publisterSettings, new NullLogger <DomainEventPublisher>()); for (int i = 0; i < count; i++) { var @event = new TestEvent() { IntValue = random.Next(), StringValue = Guid.NewGuid().ToString() }; await publisher.PublishAsync(@event).ConfigureAwait(false); } var source = new TestMessageSource(new Queue <Message>(messages)); host.RegisterMessageSource(receiverSettings.Queue, source); using (var receiver = new DomainEventReceiver(receiverSettings, provider, new NullLogger <DomainEventReceiver>())) { receiver.Start(eventTypes); int waits = 0; do { await Task.Delay(1000).ConfigureAwait(false); if (receiver.Link.LinkState == LinkState.Attached) { break; } waits++; }while (waits < 20); for (int i = 0; i < count; i++) { var message = receiver.Receive(TimeSpan.FromSeconds(10)); message.Reject(); await Task.Delay(1000).ConfigureAwait(false); } } Assert.Equal(count, source.DeadLetterCount); Assert.Equal(0, source.Count); }
public async Task ShouldReceiveMessage_Accept() { receiverSettings.Queue = Guid.NewGuid().ToString(); List <Message> messages = new List <Message>(); host.RegisterMessageProcessor(receiverSettings.Queue + "TestEvent", new TestMessageProcessor(50, messages)); linkProcessor = new TestLinkProcessor(); host.RegisterLinkProcessor(linkProcessor); int count = 1; publisterSettings.Topic = receiverSettings.Queue; var publisher = new DomainEventPublisher(publisterSettings, new NullLogger <DomainEventPublisher>()); for (int i = 0; i < count; i++) { var @event = new TestEvent() { IntValue = random.Next(), StringValue = Guid.NewGuid().ToString() }; await publisher.PublishAsync(@event).ConfigureAwait(false); } var source = new TestMessageSource(new Queue <Message>(messages)); host.RegisterMessageSource(receiverSettings.Queue, source); using (var receiver = new DomainEventReceiver(receiverSettings, provider, new NullLogger <DomainEventReceiver>())) { receiver.Start(eventTypes); for (int i = 0; i < count; i++) { var message = receiver.Receive(TimeSpan.FromSeconds(1)); Assert.NotNull(message.GetData <TestEvent>()); message.Accept(); } } Assert.Equal(0, source.DeadLetterCount); Assert.Equal(0, source.Count); }
public void ContainerHostMessageSourceTest() { string name = "ContainerHostMessageSourceTest"; int count = 100; Queue <Message> messages = new Queue <Message>(); for (int i = 0; i < count; i++) { messages.Enqueue(new Message("test") { Properties = new Properties() { MessageId = name + i } }); } var source = new TestMessageSource(messages); host.RegisterMessageSource(name, source); var connection = new Connection(Address); var session = new Session(connection); var receiver = new ReceiverLink(session, "receiver0", name); receiver.SetCredit(count, CreditMode.Manual); int released = 0; int rejected = 0; int ignored = 0; for (int i = 1; i <= count; i++) { Message message = receiver.Receive(); if (i % 5 == 0) { receiver.Reject(message); rejected++; } else if (i % 17 == 0) { receiver.Release(message); released++; } else if (i % 36 == 0) { ignored++; } else { receiver.Accept(message); } } receiver.Close(); session.Close(); connection.Close(); Thread.Sleep(500); Assert.Equal(released + ignored, source.Count); Assert.Equal(rejected, source.DeadLetterCount); }