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 ); }
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!"); }