Escribí un código para leer 1000 mensajes de una sola vez desde una cola de Azure Service Bus. Leo los mensajes con la línea: await receiver.ReceiveMessagesAsync(1000); pero solo se recibe un subconjunto de los mensajes.
Tomé el código de la muestra: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/servicebus/Azure.Messaging.ServiceBus/tests/Samples/Sample01_HelloWorld.cs , SendAndReceiveMessageSafeBatch () método
Este es mi código:
public class Program { static void Main(string[] args) { SendAndReceiveMessage().GetAwaiter().GetResult(); } public static async Task SendAndReceiveMessage() { var connectionString = "myconnectionstring"; var queueName = "myqueue"; // since ServiceBusClient implements IAsyncDisposable we create it with "await using" await using var client = new ServiceBusClient(connectionString); // create the sender var sender = client.CreateSender(queueName); IList<ServiceBusMessage> messages = new List<ServiceBusMessage>(); for (var i = 0; i < 1000; i++) { messages.Add(new ServiceBusMessage($"Message {i}")); } // send the messages await sender.SendMessagesAsync(messages); // create a receiver that we can use to receive the messages var options = new ServiceBusReceiverOptions() { ReceiveMode = ServiceBusReceiveMode.ReceiveAndDelete }; ServiceBusReceiver receiver = client.CreateReceiver(queueName, options); // the received message is a different type as it contains some service set properties IReadOnlyList<ServiceBusReceivedMessage> receivedMessages = await receiver.ReceiveMessagesAsync(1000); Console.WriteLine($"Received {receivedMessages.Count} from the queue {queueName}"); foreach (ServiceBusReceivedMessage receivedMessage in receivedMessages) { var body = receivedMessage.Body.ToString(); Console.WriteLine(body); } Console.WriteLine("END"); Console.ReadLine(); } }¿Tiene alguna sugerencia sobre cómo leer los 1000 mensajes de una sola vez?
Este es el comportamiento esperado con Azure Service Bus. El número de mensajes a recibir, maxMessages es un número máximo que no está garantizado.