Ejemplo n.º 1
0
 public OutboxFifoReceiver(SampleAppConfig configSettings)
 {
     //We need a Message Receiver to pickup the Messages that are Published!
     // NOTE: Since our payloads are simple strings we use 'string' payload type!
     ServiceBusFifoReceiver = new DefaultFifoAzureServiceBusReceiver <TPayload>(
         configSettings.AzureServiceBusConnectionString,
         configSettings.AzureServiceBusTopic,
         configSettings.AzureServiceBusSubscription
         );
 }
Ejemplo n.º 2
0
        private async Task AssertReceiptAndValidationOfThePublishedItem(ISqlTransactionalOutboxItem <Guid> outboxItem)
        {
            //*****************************************************************************************
            //* Attempt to Retrieve/Receive the Message & Validate after Arrival!
            //*****************************************************************************************
            await using var azureServiceBusReceiver = new DefaultFifoAzureServiceBusReceiver <string>(
                            TestConfiguration.AzureServiceBusConnectionString,
                            TestConfiguration.AzureServiceBusTopic,
                            TestConfiguration.AzureServiceBusSubscription,
                            options: new AzureServiceBusReceivingOptions()
            {
                LogDebugCallback     = (message) => Debug.WriteLine(message),
                ErrorHandlerCallback = (exc) => Debug.WriteLine($"ERROR: {Environment.NewLine}{exc.GetMessagesRecursively()}")
            }
                            );

            int itemProcessedCount = 0;

            try
            {
                var waitTime = IntegrationTestServiceBusDeliveryWaitTimeSpan;
                await foreach (var item in azureServiceBusReceiver.AsAsyncEnumerable(waitTime))
                {
                    Assert.IsNotNull(item, $"The received published outbox receivedItem is null! This should never happen!");
                    TestContext.Write($"Received receivedItem from Azure Service Bus receiver queue [{item.PublishedItem.UniqueIdentifier}]...");

                    //*****************************************************************************************
                    //* Validate the Item when it is detected/matched!
                    //*****************************************************************************************
                    if (item.PublishedItem.UniqueIdentifier == outboxItem.UniqueIdentifier)
                    {
                        //Finalize Status of the receivedItem we published as Successfully Received!
                        await item.AcknowledgeSuccessfulReceiptAsync();

                        itemProcessedCount++;

                        //VALIDATE the Matches of original Payload, Inserted item, and Received/Published Data!
                        TestHelper.AssertOutboxItemMatchesReceivedItem(outboxItem, item);

                        //We found the Item we expected, and all tests passed so we can break out and FINISH this test!
                        break;
                    }
                    else
                    {
                        await item.RejectAsDeadLetterAsync();
                    }
                }
            }
            catch (OperationCanceledException)
            {
                Assert.Fail("The receivedItem published to Azure Service Bus was never received fore timing out!");
            }

            Assert.IsTrue(itemProcessedCount > 0, "We should have processed at least the one receivedItem we published!");
        }