Exemplo n.º 1
0
        public void MessageWithTimeToLiveWillDisappearFromErrorQueueAsWell()
        {
            // arrange
            var senderBus = CreateBus(SenderQueueName, new HandlerActivatorForTesting()).Start(1);

            var errorQueue       = GetMessageQueue(ReceiverErrorQueueName);
            var deadLetterQueue  = GetMessageQueueFromPath(string.Format(@"FormatName:DIRECT=OS:{0}\SYSTEM$;DEADLETTER", Environment.MachineName));
            var deadLetterQueue2 = GetMessageQueueFromPath(string.Format(@"FormatName:DIRECT=OS:{0}\SYSTEM$;DEADXACT", Environment.MachineName));

            var activator = new HandlerActivatorForTesting()
                            .Handle <string>(s =>
            {
                throw new OmfgExceptionThisIsBad("whoahhh!");
            });

            CreateBus(ReceiverQueueName, activator, new InMemorySubscriptionStorage(), new SagaDataPersisterForTesting(),
                      ReceiverErrorQueueName).Start(1);

            const string message = "HELLO!";

            senderBus.AttachHeader(message, Headers.TimeToBeReceived, "00:00:02");
            senderBus.Routing.Send(ReceiverQueueName, message);

            Thread.Sleep(3.Seconds());

            ReceivedTransportMessage transportMessage = null;

            try
            {
                transportMessage = (ReceivedTransportMessage)errorQueue.Receive(3.Seconds()).Body;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            try
            {
                transportMessage = (ReceivedTransportMessage)deadLetterQueue.Receive(3.Seconds()).Body;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            try
            {
                transportMessage = (ReceivedTransportMessage)deadLetterQueue2.Receive(3.Seconds()).Body;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            transportMessage.ShouldBe(null);
        }