Üzenetsor használatával üzenetek küldésére és fogadására vonatkozó kód írása

Befejeződött

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);