Üzenetsor használatával üzenetek küldésére és fogadására vonatkozó kód írása
Az elosztott alkalmazások a Service Bus-üzenetsorokat ideiglenes tárolóhelyként használják azokhoz az üzenetekhez, amelyek egy célösszetevőbe való kézbesítésre várnak. Ha üzenetsoron keresztül szeretne üzeneteket küldeni és fogadni, akkor a forrás- és célösszetevőkbe is be kell írnia a kódot.
Fontolja meg a Contoso Bikes alkalmazást. Az ügyfél egy webhelyen vagy mobilalkalmazáson keresztül adhat le rendelést. Mivel a webhelyek és mobilalkalmazások ügyféleszközökön futnak, valójában nincs korlátozva, hogy egyszerre hány megrendelést lehet leadni. Ha a mobilalkalmazás és a webhely egy Service Bus-üzenetsorba helyezi a rendeléseket, a háttérösszetevő (egy webalkalmazás) a saját tempójában tudja feldolgozni a rendeléseket az adott üzenetsorból.
A Contoso Bikes alkalmazás valójában több lépést is tartalmaz egy új megrendelés kezeléséhez. Minden lépés a fizetés első engedélyezésétől függ, ezért úgy dönt, hogy egy üzenetsort használ. A fogadó összetevő első feladata a fizetés feldolgozása.
A Contosónak a mobilalkalmazásban és a webhelyen kódot kell írnia, amely az üzenetet az üzenetsorhoz adja. A háttérbeli webalkalmazásban a Contoso olyan kódot ír, amely üzeneteket hoz létre az üzenetsorból.
Itt áttekintheti az üzenetek Service Bus-üzenetsor használatával történő küldéséhez és fogadásához használt kód írásának folyamatát és szempontjait.
Azure.Messaging.ServiceBus NuGet-csomag
A Service Buson keresztül üzeneteket küldő és fogadó kódok írásának megkönnyítése érdekében a Microsoft .NET-osztályok könyvtárát biztosítja. Bármely .NET-nyelven használhatja a Service Bus-üzenetsorok vagy -témakörök használatát. Ezt a kódtárat az Azure.Messaging.ServiceBus NuGet-csomag hozzáadásával is felveheti az alkalmazásba.
Kapcsolati sztringek és kulcsok
A forrás- és a célösszetevőknek két információra van szükségük az üzenetsorhoz a Service Bus-névtérben való kapcsolódáshoz:
- A Service Bus-névtér helye, más néven végpont: A hely teljes tartománynévként van megadva a servicebus.windows.net tartományon belül. Például: bicycleService.servicebus.windows.net.
- Hozzáférési kulcs: A Service Bus érvényes hozzáférési kulcs megkövetelésével korlátozza az üzenetsorokhoz vagy témakörökhöz való hozzáférést.
Mindkét információ a ServiceBusClient objektumnak kapcsolati sztring formájában érhető el. A névtér megfelelő kapcsolati sztring az Azure Portalon szerezheti be.
Hívási metódusok aszinkron módon
Az Azure-beli üzenetsor több ezer mérföldnyire lehet az összetevők küldésétől és fogadásától. Még ha fizikailag is szoros, a lassú kapcsolatok és a sávszélesség-versengés késést okozhat, amikor egy összetevő metódust hív meg az üzenetsoron. Ezért a Service Bus-ügyfélkódtár metódusokat tesz async
elérhetővé az üzenetsorok használatához. Ezeket a metódusokat fogjuk használni a szál blokkolásának megakadályozására, amíg a hívások befejeződnek.
Amikor üzenetet küld egy üzenetsorba, használja például a SendMessageAsync metódust a await
kulcsszóval.
Üzenet küldése üzenetsorba
Ha üzenetet szeretne küldeni egy üzenetsorba, hajtsa végre az alábbi lépéseket.
Bármely küldő vagy fogadó összetevőben adja hozzá az alábbi using
utasításokat a Service Bus-üzenetsort hívó kódfájlokhoz.
using System.Threading;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;
Ezután hozzon létre egy új ServiceBusClient
objektumot, és adja át a kapcsolati sztring és az üzenetsor nevét.
// Create a ServiceBusClient object using the connection string to the namespace.
await using var client = new ServiceBusClient(connectionString);
// Create a ServiceBusSender object by invoking the CreateSender method on the ServiceBusClient object, and specifying the queue name.
ServiceBusSender sender = client.CreateSender(queueName);
A metódus meghívásával és egy üzenet továbbításával üzenetet küldhet az ServiceBusSender.SendMessageAsync()
üzenetsorba ServiceBusMessage
.
// Create a new message to send to the queue.
string messageContent = "Order new crankshaft for eBike.";
var message = new ServiceBusMessage(messageContent);
// Send the message to the queue.
await sender.SendMessageAsync(message);
Üzenetek fogadása üzenetsorból
Az üzenetek fogadásához először regisztrálnia kell egy üzenetkezelőt. Az üzenetkezelő a kód azon metódusa, amely akkor lesz meghívva, ha egy üzenet elérhető az üzenetsoron.
// Create a ServiceBusProcessor for the queue.
await using ServiceBusProcessor processor = client.CreateProcessor(queueName, options);
// Specify handler methods for messages and errors.
processor.ProcessMessageAsync += MessageHandler;
processor.ProcessErrorAsync += ErrorHandler;
Végezze el a feldolgozást. Ezután az üzenetkezelőben hívja meg a metódust ProcessMessageEventArgs.CompleteMessageAsync()
, hogy távolítsa el az üzenetet az üzenetsorból.
await args.CompleteMessageAsync(args.Message);