Übung: Abrufen einer Nachricht aus der Warteschlange
Vervollständigen wir nun die Anwendung, indem wir Code schreiben, um die nächste Nachricht in der Warteschlange zu lesen, sie zu verarbeiten und anschließend aus der Warteschlange zu löschen.
Wir platzieren den Code in der Anwendung und führen ihn aus, wenn ein Benutzer die entsprechenden Menüelemente auswählt. In einem realen Szenario sollte dieser Code in einer separaten Anwendung zum Empfangen und Verarbeiten von Nachrichten platziert werden.
Einsehen der nächsten Nachricht
Fügen Sie eine neue Methode hinzu, die die nächste Nachricht aus der Warteschlange einsehen kann.
Öffnen Sie die Quelldatei
Program.cs
in Ihrem Editor.Suchen Sie die
PeekMessageAsync
-Methode in der Anwendung, und löschen Sie die Zeile, die eineNotImplementedException
auslöst.Fügen Sie der Methode den folgenden Code hinzu. Dieser Code sieht die nächste Nachricht in der Warteschlange ein und gibt einige Informationen zur Nachricht aus.
Response<PeekedMessage> response = await queueClient.PeekMessageAsync(); PeekedMessage message = response.Value; Console.WriteLine($"Message id : {message.MessageId}"); Console.WriteLine($"Inserted on : {message.InsertedOn}"); Console.WriteLine("We are only peeking at the message, so another consumer could dequeue this message");
Empfangen und Verarbeiten von Nachrichten
Fügen Sie Code hinzu, um eine Nachricht in der Anwendung zu empfangen und zu verarbeiten.
Suchen Sie die
ReceiveMessageAsync
-Methode in der Anwendung, und löschen Sie die Zeile, die eineNotImplementedException
auslöst.Fügen Sie am Anfang der
ReceiveMessageAsync
-Methode die folgenden Codezeilen hinzu, um eine Nachricht aus der Warteschlange abzurufen.Response<QueueMessage> response = await queueClient.ReceiveMessageAsync(); QueueMessage message = response.Value;
Fügen Sie die folgenden Codezeilen unterhalb der beiden Zeilen hinzu, die Sie der Methode gerade hinzugefügt haben. Dieser Code gibt einige Eigenschaften der empfangenen Nachricht aus, einschließlich des Textkörpers der unformatierten Nachricht im JSON-Format.
Console.WriteLine($"Message id : {message.MessageId}"); Console.WriteLine($"Inserted on : {message.InsertedOn}"); Console.WriteLine($"Message (raw) : {message.Body}");
Um den Inhalt der Nachricht in ein Objekt zu deserialisieren, mit dem wir in unserem Code arbeiten können, fügen Sie die Methode
ToObjectFromJson
zur EigenschaftBody
des ObjektsQueueMessage
hinzu. Fügen Sie der Methode die folgenden Zeilen hinzu.NewsArticle article = message.Body.ToObjectFromJson<NewsArticle>(); Console.WriteLine("News Article"); Console.WriteLine($"- Headline : {article.Headline}"); Console.WriteLine($"- Location : {article.Location}");
Wenn wir die Nachricht verarbeitet haben, müssen wir sie schließlich aus der Warteschlange löschen, damit sie nicht von anderen Consumern verarbeitet wird. Fügen Sie am Ende der Methode
ReceiveMessageAsync
den folgenden Code hinzu.Console.WriteLine("The processing for this message is just printing it out, so now it will be deleted"); await queueClient.DeleteMessageAsync(message.MessageId, message.PopReceipt); Console.WriteLine($"Message deleted");
Die vollständige Methode sollte wie folgt aussehen:
static async Task ReceiveMessageAsync(QueueClient queueClient) { Response<QueueMessage> response = await queueClient.ReceiveMessageAsync(); QueueMessage message = response.Value; Console.WriteLine($"Message id : {message.MessageId}"); Console.WriteLine($"Inserted on : {message.InsertedOn}"); Console.WriteLine($"Message (raw) : {message.Body}"); NewsArticle article = message.Body.ToObjectFromJson<NewsArticle>(); Console.WriteLine("News Article"); Console.WriteLine($"- Headline : {article.Headline}"); Console.WriteLine($"- Location : {article.Location}"); Console.WriteLine("The processing for this message is just printing it out, so now it will be deleted"); await queueClient.DeleteMessageAsync(message.MessageId, message.PopReceipt); Console.WriteLine($"Message deleted"); }
Speichern Sie die Datei
Program.cs
.
Ausführen der Anwendung
Der Code ist nun vollständig. Er kann jetzt Nachrichten senden und abrufen.
Erstellen Sie zunächst die Anwendung.
dotnet build
Führen Sie die Anwendung aus.
dotnet run
Verwenden Sie das Menü, um mit dem Hinzufügen, dem Einsehen und dem Empfangen von Nachrichten in der Warteschlange zu experimentieren. Die Beispielausgabe sollte in etwa wie folgt aussehen.
What operation would you like to perform? 1 - Send message 2 - Peek at the next message 3 - Receive message X - Exit program 1 Enter headline: World leaders to meet at economic summit Enter location: Paris, France Message sent. Message id=8f5b9bc7-3e7f-448b-9787-508636963938 Expiration time=10/14/2021 9:01:58 PM +00:00 What operation would you like to perform? 1 - Send message 2 - Peek at the next message 3 - Receive message X - Exit program 2 Message id : 8f5b9bc7-3e7f-448b-9787-508636963938 Inserted on : 10/7/2021 9:01:58 PM +00:00 We are only peeking at the message, so another consumer could dequeue this message What operation would you like to perform? 1 - Send message 2 - Peek at the next message 3 - Receive message X - Exit program 3 Message id : 8f5b9bc7-3e7f-448b-9787-508636963938 Inserted on : 10/7/2021 9:01:58 PM +00:00 Message (raw) : {"Headline":"World leaders to meet at economic summit","Location":"Paris, France"} News Article - Headline : World leaders to meet at economic summit - Location : Paris, France The processing for this message is just printing it out, so now it will be deleted Message deleted What operation would you like to perform? 1 - Send message 2 - Peek at the next message 3 - Receive message X - Exit program X