Utilizzo di un argomento del bus di servizio di Azure al momento e in esecuzione in un problema durante la ricezione dei messaggi mediante il metodo ReceiveBatch. Il problema è che i risultati attesi non sono in realtà i risultati che sto ottenendo. Ecco l'impostazione del codice di base, casi d'uso sono al di sotto:Comportamento dispari del servizio di ricezione di Azure ReceiveBatch()
SubscriptionClient client = SubscriptionClient.CreateFromConnectionString(connectionString, convoTopic, subName);
IEnumerable<BrokeredMessage> messageList = client.ReceiveBatch(100);
foreach (BrokeredMessage message in messageList)
{
try
{
Console.WriteLine(message.GetBody<string>() + message.MessageId);
message.Complete();
}
catch (Exception ex)
{
message.Abandon();
}
}
client.Close();
MessageBox.Show("Done");
Utilizzando il codice di cui sopra, se mando 4 messaggi, quindi il polling sulla prima esecuzione attraverso ottengo il primo messaggio. Alla seconda manche ho l'altro 3. Mi aspetto di ottenere tutti e 4 allo stesso tempo. Sembra sempre restituire un valore singolare sul primo sondaggio e il resto sui sondaggi successivi. (stesso risultato con 3 e 5 dove ottengo n-1 di n messaggi inviati al secondo tentativo e 1 messaggio al primo tentativo).
Se ho 0 messaggi da ricevere, l'operazione richiede tra ~ 30-60 secondi per ottenere l'elenco dei messaggi (che ha un conteggio 0). Ho bisogno di questo per tornare all'istante.
Se cambio il codice in
IEnumerable<BrokeredMessage> messageList = client.ReceiveBatch(100, new Timespan(0,0,0));
, il numero 2 scompare perché il problema 1 persiste ancora dove devo chiamare il codice due volte per ottenere tutti i messaggi.
sto supponendo che l'edizione # 2 è a causa di un valore di timeout predefinito che ho sovrascrivere a # 3 (anche se mi trovo confuso che se un messaggio è lì risponde immediatamente senza attendere il tempo di default). Non sono sicuro del motivo per cui non ricevo mai l'intera quantità di messaggi in una sola ReceiveBatch.
È possibile che "Argomento" in questione sia "Partizionato"? Ho visto esattamente lo stesso comportamento con una 'Partitioned Queue'. –
Grazie, questo era parte del problema. –