public void Given_The_Message_Cannot_Be_Processed_When_I_Set_A_DeadLetter_Then_The_Message_Is_Only_Handled_The_Correct_Amount_Of_Times()
        {
            //arrange
            const int maxAttempts = 5;

            var message1 = $"Hello, world {Guid.NewGuid()}";

            _messageHandler.SetResult(false);

            //act
            _sut
            .WithProject(_projectId)
            .WithTopic(_topicId)
            .CreateSubscription(_subscriptionId, 60)
            .WithDeadLetter(_deadLetterTopicId, maxAttempts)
            .StartConsuming(_messageHandler, true);

            PublishMessage(message1);

            Thread.Sleep(20000); // allow time for processing the messages off the queue

            //assert
            Assert.IsNotNull(_messageHandler.MessagesHandled);
            Assert.AreEqual(0, _messageHandler.MessagesHandled.Count);
            Assert.IsTrue(_messageHandler.MessagesNotHandled.Count == maxAttempts || _messageHandler.MessagesNotHandled.Count == maxAttempts + 1);
            Assert.IsTrue(_messageHandler.MessagesNotHandled.Contains(message1));
        }
コード例 #2
0
        public void Given_The_Same_DeadLetter_For_Two_Subscriptions_When_A_Message_Fails_Then_The_Message__Put_On_The_One_Deadletter_Topic()
        {
            //arrange
            const int maxAttempts = 5;

            var message1 = $"Hello, world {Guid.NewGuid()}";
            var message2 = $"Hello, world {Guid.NewGuid()}";

            _messageHandler1.SetResult(false);
            _messageHandler2.SetResult(false);

            //act
            _sut1
            .WithProject(_projectId)
            .WithTopic(_topic1Id)
            .CreateSubscription(_subscription1Id, 60)
            .WithDeadLetter(_deadLetterTopicId, maxAttempts)
            .StartConsuming(_messageHandler1, true);

            _sut2
            .WithProject(_projectId)
            .WithTopic(_topic2Id)
            .CreateSubscription(_subscription2Id, 60)
            .WithDeadLetter(_deadLetterTopicId, maxAttempts)
            .StartConsuming(_messageHandler2, true);

            PublishMessage(message1, _topic1Id);
            PublishMessage(message2, _topic2Id);

            Thread.Sleep(20000); // allow time for processing the messages off the queue

            var subscription1Message = _messageHelper.GetMessage(_projectId, _subscription1Id);
            var subscription2Message = _messageHelper.GetMessage(_projectId, _subscription2Id);

            Thread.Sleep(20000); // allow time for processing the messages onto the deadletter queue

            var deadletterMessage1 = _messageHelper.GetMessage(_projectId, _deadLetterSubscriptionId);
            var deadletterMessage2 = _messageHelper.GetMessage(_projectId, _deadLetterSubscriptionId);

            //assert
            Assert.IsNull(subscription1Message);
            Assert.IsNull(subscription2Message);
            Assert.IsNotNull(deadletterMessage1);
            Assert.IsNotNull(deadletterMessage2);
            Assert.IsTrue(deadletterMessage1 == message1 || deadletterMessage2 == message1);
            Assert.IsTrue(deadletterMessage1 == message2 || deadletterMessage2 == message2);
        }