Rychlý start: Odesílání a příjem zpráv z fronty služby Azure Service Bus (.NET)
V tomto rychlém startu provedete následující kroky:
Pomocí webu Azure Portal vytvoříme obor názvů služby Service Bus.
Pomocí webu Azure Portal vytvoříme frontu služby Service Bus.
Napište konzolovou aplikaci .NET, která odešle sadu zpráv do fronty.
Napište konzolovou aplikaci .NET pro příjem těchto zpráv z fronty.
Poznámka:
Tento rychlý start obsahuje podrobné pokyny k implementaci jednoduchého scénáře odeslání dávky zpráv do fronty služby Service Bus a jejich přijetí. Přehled klientské knihovny .NET najdete v klientské knihovně služby Azure Service Bus pro .NET. Další ukázky najdete v ukázkách service bus .NET na GitHubu.
Požadavky
Pokud s touto službou teprve začínáte, přečtěte si před tímto rychlým startem přehled služby Service Bus.
- Předplatné Azure. Pokud chcete používat služby Azure, včetně Služby Azure Service Bus, potřebujete předplatné. Pokud nemáte existující účet Azure, můžete si zaregistrovat bezplatnou zkušební verzi.
- Visual Studio 2022. Ukázková aplikace využívá nové funkce, které byly zavedeny v jazyce C# 10. Stále můžete používat klientskou knihovnu Service Bus s předchozími jazykovými verzemi jazyka C#, ale syntaxe se může lišit. Pokud chcete použít nejnovější syntaxi, doporučujeme nainstalovat .NET 6.0 nebo novější a nastavit jazyk
latest
na verzi . Pokud používáte Visual Studio, verze před sadou Visual Studio 2022 nejsou kompatibilní s nástroji potřebnými k sestavení projektů C# 10.
Vytvoření oboru názvů na webu Azure Portal
Pokud chcete začít používat entity zasílání zpráv služby Service Bus v Azure, musíte nejprve vytvořit obor názvů s jedinečným názvem v rámci Azure. Obor názvů poskytuje kontejner oborů pro prostředky služby Service Bus (fronty, témata atd.) v rámci vaší aplikace.
Vytvoření oboru názvů:
Přihlaste se k portálu Azure.
Přejděte na stránku Všechny služby.
Na levém navigačním panelu vyberte Možnost Integrace ze seznamu kategorií, najeďte myší na Service Bus a pak vyberte + tlačítko na dlaždici Service Bus.
Na stránce Základy na stránce Vytvořit obor názvů postupujte takto:
V části Předplatné zvolte předplatné Azure, ve kterém chcete vytvořit obor názvů.
V části Skupina prostředků zvolte existující skupinu prostředků, ve které bude obor názvů aktivní, nebo vytvořte novou.
Zadejte název oboru názvů. Název oboru názvů by měl dodržovat následující zásady vytváření názvů:
- Název musí být jedinečný v rámci Azure. Systém okamžitě kontroluje, jestli je název dostupný.
- Délka názvu je nejméně 6 a maximálně 50 znaků.
- Název může obsahovat pouze písmena, číslice, pomlčky -.
- Název musí začínat písmenem a končit písmenem nebo číslem.
- Název nekončí "-sb" nebo "-mgmt".
V části Umístění zvolte oblast, ve které má být váš obor názvů hostovaný.
V části Cenová úroveň vyberte cenovou úroveň (Basic, Standard nebo Premium) pro obor názvů. Pro účely tohoto rychlého startu vyberte Standard.
Důležité
Pokud chcete použít témata a předplatná, zvolte Standard nebo Premium. Témata nebo předplatná se nepodporují v cenové úrovni Basic.
Pokud jste vybrali cenovou úroveň Premium , zadejte počet jednotek zasílání zpráv. Úroveň Premium poskytuje izolaci prostředků na úrovni procesoru a paměti, aby každá úloha běžela izolovaně. Kontejner prostředků se nazývá jednotka zasílání zpráv. Obor názvů premium má alespoň jednu jednotku zasílání zpráv. Pro každý obor názvů služby Service Bus Premium můžete vybrat 1, 2, 4, 8 nebo 16 jednotek zasílání zpráv. Další informace najdete v tématu Zasílání zpráv Service Bus Premium.
Vyberte Zkontrolovat a vytvořit v dolní části stránky.
Na stránce Zkontrolovat a vytvořit zkontrolujte nastavení a vyberte Vytvořit.
Po úspěšném nasazení prostředku vyberte na stránce nasazení možnost Přejít k prostředku .
Zobrazí se domovská stránka vašeho oboru názvů služby Service Bus.
Vytvoření fronty na webu Azure Portal
Na stránce Namespace service bus vyberte fronty v levé navigační nabídce.
Na stránce Fronty vyberte na panelu nástrojů + Fronta.
Zadejte název fronty a ostatní hodnoty ponechte ve výchozím nastavení.
Teď vyberte Vytvořit.
Důležité
Pokud s Azure začínáte, může být jednodušší najít možnost Připojovací řetězec . Výběrem karty Připojovací řetězec zobrazíte pokyny k použití připojovací řetězec v tomto rychlém startu. Doporučujeme používat možnost bez hesla v reálných aplikacích a produkčních prostředích.
Ověření aplikace v Azure
Tento rychlý start ukazuje dva způsoby připojení ke službě Azure Service Bus: bez hesla a připojovací řetězec.
První možnost ukazuje, jak se pomocí objektu zabezpečení v Microsoft Entra ID a řízení přístupu na základě role (RBAC) připojit k oboru názvů služby Service Bus. Nemusíte se starat o pevně zakódované připojovací řetězec v kódu nebo v konfiguračním souboru nebo v zabezpečeném úložišti, jako je Azure Key Vault.
Druhá možnost ukazuje, jak se pomocí připojovací řetězec připojit k oboru názvů služby Service Bus. Pokud s Azure začínáte, možná zjistíte, že připojovací řetězec možnost bude jednodušší postupovat. Doporučujeme používat možnost bez hesla v reálných aplikacích a produkčních prostředích. Další informace najdete v tématu Ověřování a autorizace. Další informace o ověřování bez hesla najdete na stránce přehledu.
Přiřazení rolí uživateli Microsoft Entra
Při místním vývoji se ujistěte, že uživatelský účet, který se připojuje ke službě Azure Service Bus, má správná oprávnění. K odesílání a příjmu zpráv budete potřebovat roli Vlastník dat služby Azure Service Bus. K přiřazení této role budete potřebovat roli Správce uživatelských přístupů nebo jinou roli, která tuto Microsoft.Authorization/roleAssignments/write
akci zahrnuje. Role Azure RBAC můžete uživateli přiřadit pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu. Další informace o dostupných oborech pro přiřazení rolí najdete na stránce přehledu oboru.
Následující příklad přiřadí roli k vašemu uživatelskému Azure Service Bus Data Owner
účtu, který poskytuje úplný přístup k prostředkům služby Azure Service Bus. V reálném scénáři postupujte podle principu nejnižšího oprávnění , aby uživatelům poskytla pouze minimální oprávnění potřebná pro bezpečnější produkční prostředí.
Předdefinované role Azure pro Azure Service Bus
Pro Službu Azure Service Bus je správa oborů názvů a všech souvisejících prostředků prostřednictvím webu Azure Portal a rozhraní API pro správu prostředků Azure už chráněná pomocí modelu Azure RBAC. Azure poskytuje následující předdefinované role Azure pro autorizaci přístupu k oboru názvů služby Service Bus:
- Vlastník dat služby Azure Service Bus: Umožňuje přístup k datům k oboru názvů služby Service Bus a jeho entitám (fronty, témata, odběry a filtry). Člen této role může odesílat a přijímat zprávy z front nebo témat nebo odběrů.
- Odesílatel dat služby Azure Service Bus: Pomocí této role můžete udělit přístup k oboru názvů služby Service Bus a jeho entitám.
- Příjemce dat služby Azure Service Bus: Pomocí této role můžete udělit přístup k oboru názvů služby Service Bus a jeho entitám.
Pokud chcete vytvořit vlastní roli, přečtěte si téma Práva potřebná pro operace služby Service Bus.
Přidání uživatele Microsoft Entra do role vlastníka služby Azure Service Bus
Přidejte své uživatelské jméno Microsoft Entra do role Vlastník dat služby Azure Service Bus na úrovni oboru názvů služby Service Bus. Umožní aplikaci spuštěnou v kontextu vašeho uživatelského účtu odesílat zprávy do fronty nebo tématu a přijímat zprávy z fronty nebo odběru tématu.
Důležité
Ve většině případů bude trvat minutu nebo dvě, než se přiřazení role rozšíří v Azure. Ve výjimečných případech může trvat až osm minut. Pokud při prvním spuštění kódu dojde k chybám ověřování, chvíli počkejte a zkuste to znovu.
Pokud nemáte na webu Azure Portal otevřenou stránku Namespace Service Bus, vyhledejte obor názvů služby Service Bus pomocí hlavního panelu hledání nebo levé navigace.
Na stránce přehledu vyberte v nabídce vlevo řízení přístupu (IAM ).
Na stránce Řízení přístupu (IAM) vyberte kartu Přiřazení rolí.
V horní nabídce vyberte + Přidat a potom přidejte přiřazení role z výsledné rozevírací nabídky.
Pomocí vyhledávacího pole vyfiltrujte výsledky podle požadované role. V tomto příkladu vyhledejte
Azure Service Bus Data Owner
a vyberte odpovídající výsledek. Pak zvolte Další.V části Přiřadit přístup vyberte Uživatel, skupina nebo instanční objekt a pak zvolte + Vybrat členy.
V dialogovém okně vyhledejte své uživatelské jméno Microsoft Entra (obvykle vaše user@domain e-mailová adresa) a pak v dolní části dialogového okna zvolte Vybrat .
Vyberte Zkontrolovat a přiřadit přejděte na poslední stránku a pak proces dokončete opětovnou kontrolou a přiřazením .
Spuštění sady Visual Studio a přihlášení k Azure
Přístup k oboru názvů služby Service Bus můžete autorizovat pomocí následujícího postupu:
Spusťte Visual Studio. Pokud se zobrazí okno Začínáme , vyberte v pravém podokně odkaz Pokračovat bez kódu .
V pravém horním rohu sady Visual Studio vyberte tlačítko Přihlásit se.
Přihlaste se pomocí účtu Microsoft Entra, kterému jste přiřadili roli dříve.
Zasílání zpráv do fronty
V této části se dozvíte, jak vytvořit konzolovou aplikaci .NET pro odesílání zpráv do fronty služby Service Bus.
Poznámka:
Tento rychlý start obsahuje podrobné pokyny k implementaci jednoduchého scénáře odeslání dávky zpráv do fronty služby Service Bus a jejich přijetí. Další ukázky v jiných a pokročilých scénářích najdete v ukázkách .NET služby Service Bus na GitHubu.
Vytvoření konzolové aplikace
V sadě Visual Studio vyberte nabídku Soubor ->Nový ->Projekt .
V dialogovém okně Vytvořit nový projekt proveďte následující kroky: Pokud toto dialogové okno nevidíte, vyberte v nabídce Soubor , vyberte Nový a pak vyberte Projekt.
Vyberte jazyk C# pro programovací jazyk.
Vyberte konzolu pro typ aplikace.
V seznamu výsledků vyberte konzolovou aplikaci .
Pak vyberte Další.
Zadejte QueueSender pro název projektu, ServiceBusQueueQuickStart pro název řešení a pak vyberte Další.
Na stránce Další informace vyberte Vytvořit, abyste vytvořili řešení a projekt.
Přidání balíčků NuGet do projektu
V nabídce vyberte Nástroje>NuGet Správce balíčků> Správce balíčků Konzola.
Spuštěním následujícího příkazu nainstalujte balíček NuGet Azure.Messaging.ServiceBus .
Install-Package Azure.Messaging.ServiceBus
Spuštěním následujícího příkazu nainstalujte balíček NuGet Azure.Identity .
Install-Package Azure.Identity
Přidání kódu pro odesílání zpráv do fronty
Nahraďte obsah
Program.cs
následujícím kódem. Důležité kroky jsou popsané v následující části s dalšími informacemi v komentářích ke kódu.- Vytvoří objekt ServiceBusClient pomocí objektu
DefaultAzureCredential
.DefaultAzureCredential
automaticky zjistí a použije přihlašovací údaje vašeho přihlášení k sadě Visual Studio k ověření ve službě Azure Service Bus. - Vyvolá CreateSender metoda na ServiceBusClient objekt vytvořit ServiceBusSender objekt pro konkrétní frontu Service Bus.
- Vytvoří ServiceBusMessageBatch objekt pomocí ServiceBusSender.CreateMessageBatchAsync metoda.
- Přidejte zprávy do dávky pomocí ServiceBusMessageBatch.TryAddMessage.
- Odešle dávku zpráv do fronty Service Bus pomocí metody ServiceBusSender.SendMessagesAsync .
Důležité
Aktualizujte zástupné hodnoty (
<NAMESPACE-NAME>
a<QUEUE-NAME>
) v fragmentu kódu s názvy oboru názvů a fronty služby Service Bus.using Azure.Messaging.ServiceBus; using Azure.Identity; // name of your Service Bus queue // the client that owns the connection and can be used to create senders and receivers ServiceBusClient client; // the sender used to publish messages to the queue ServiceBusSender sender; // number of messages to be sent to the queue const int numOfMessages = 3; // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // Set the transport type to AmqpWebSockets so that the ServiceBusClient uses the port 443. // If you use the default AmqpTcp, ensure that ports 5671 and 5672 are open. var clientOptions = new ServiceBusClientOptions { TransportType = ServiceBusTransportType.AmqpWebSockets }; //TODO: Replace the "<NAMESPACE-NAME>" and "<QUEUE-NAME>" placeholders. client = new ServiceBusClient( "<NAMESPACE-NAME>.servicebus.windows.net", new DefaultAzureCredential(), clientOptions); sender = client.CreateSender("<QUEUE-NAME>"); // create a batch using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync(); for (int i = 1; i <= numOfMessages; i++) { // try adding a message to the batch if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}"))) { // if it is too large for the batch throw new Exception($"The message {i} is too large to fit in the batch."); } } try { // Use the producer client to send the batch of messages to the Service Bus queue await sender.SendMessagesAsync(messageBatch); Console.WriteLine($"A batch of {numOfMessages} messages has been published to the queue."); } finally { // Calling DisposeAsync on client types is required to ensure that network // resources and other unmanaged objects are properly cleaned up. await sender.DisposeAsync(); await client.DisposeAsync(); } Console.WriteLine("Press any key to end the application"); Console.ReadKey();
- Vytvoří objekt ServiceBusClient pomocí objektu
Sestavte projekt a ujistěte se, že nedošlo k žádným chybám.
Spusťte program a počkejte na potvrzovací zprávu.
A batch of 3 messages has been published to the queue
Důležité
Ve většině případů bude trvat minutu nebo dvě, než se přiřazení role rozšíří v Azure. Ve výjimečných případech může trvat až osm minut. Pokud při prvním spuštění kódu dojde k chybám ověřování, chvíli počkejte a zkuste to znovu.
Na webu Azure Portal postupujte takto:
Přejděte do oboru názvů služby Service Bus.
Na stránce Přehled vyberte frontu v dolním prostředním podokně.
Všimněte si hodnot v části Základy .
Všimněte si následujících hodnot:
- Hodnota počtu aktivních zpráv pro frontu je teď 3. Pokaždé, když spustíte tuto aplikaci odesílatele bez načtení zpráv, se tato hodnota zvýší o 3.
- Aktuální velikost fronty se zvýší při každém přidání zpráv do fronty.
- V grafu Zprávy v dolní části Metriky vidíte, že fronta obsahuje tři příchozí zprávy.
Přijetí zpráv z fronty
V této části vytvoříte konzolovou aplikaci .NET, která přijímá zprávy z fronty.
Poznámka:
Tento rychlý start obsahuje podrobné pokyny k implementaci scénáře odeslání dávky zpráv do fronty služby Service Bus a jejich následnému přijetí. Další ukázky v jiných a pokročilých scénářích najdete v ukázkách .NET služby Service Bus na GitHubu.
Vytvoření projektu pro příjemce
- V okně Průzkumník řešení klikněte pravým tlačítkem na řešení ServiceBusQueueQuickStart, přejděte na příkaz Přidat a vyberte Nový projekt.
- Vyberte Konzolová aplikace a vyberte Další.
- Jako název projektu zadejte QueueReceiver a vyberte Vytvořit.
- V okně Průzkumník řešení klikněte pravým tlačítkem na QueueReceiver a vyberte Nastavit jako spouštěný projekt.
Přidání balíčků NuGet do projektu
V nabídce vyberte Nástroje>NuGet Správce balíčků> Správce balíčků Konzola.
Vyberte QueueReceiver pro výchozí projekt.
Spuštěním následujícího příkazu nainstalujte balíček NuGet Azure.Messaging.ServiceBus .
Install-Package Azure.Messaging.ServiceBus
Spuštěním následujícího příkazu nainstalujte balíček NuGet Azure.Identity .
Install-Package Azure.Identity
Přidání kódu pro příjem zpráv z fronty
V této části přidáte kód pro načtení zpráv z fronty.
Program
Do třídy přidejte následující kód:using System.Threading.Tasks; using Azure.Identity; using Azure.Messaging.ServiceBus; // the client that owns the connection and can be used to create senders and receivers ServiceBusClient client; // the processor that reads and processes messages from the queue ServiceBusProcessor processor;
Na konec
Program
třídy připojte následující metody.// handle received messages async Task MessageHandler(ProcessMessageEventArgs args) { string body = args.Message.Body.ToString(); Console.WriteLine($"Received: {body}"); // complete the message. message is deleted from the queue. await args.CompleteMessageAsync(args.Message); } // handle any errors when receiving messages Task ErrorHandler(ProcessErrorEventArgs args) { Console.WriteLine(args.Exception.ToString()); return Task.CompletedTask; }
Na konec
Program
třídy připojte následující kód. Důležité kroky jsou popsané v následující části s dalšími informacemi v komentářích ke kódu.- Vytvoří objekt ServiceBusClient pomocí objektu
DefaultAzureCredential
.DefaultAzureCredential
automaticky zjistí a použije přihlašovací údaje vašeho přihlášení k sadě Visual Studio k ověření ve službě Azure Service Bus. - Vyvolá CreateProcessor metoda u objektu
ServiceBusClient
k vytvoření ServiceBusProcessor objektu pro zadanou frontu Service Bus. - Určuje obslužné rutiny pro ProcessMessageAsync a ProcessErrorAsync události ServiceBusProcessor objektu.
- Spustí zpracování zpráv vyvoláním Metody StartProcessingAsync u objektu
ServiceBusProcessor
. - Když uživatel stiskne klávesu pro ukončení zpracování, vyvolá u objektu
ServiceBusProcessor
stopProcessingAsync.
Důležité
Aktualizujte zástupné hodnoty (
<NAMESPACE-NAME>
a<QUEUE-NAME>
) v fragmentu kódu s názvy oboru názvů a fronty služby Service Bus.// The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // Set the transport type to AmqpWebSockets so that the ServiceBusClient uses port 443. // If you use the default AmqpTcp, make sure that ports 5671 and 5672 are open. // TODO: Replace the <NAMESPACE-NAME> placeholder var clientOptions = new ServiceBusClientOptions() { TransportType = ServiceBusTransportType.AmqpWebSockets }; client = new ServiceBusClient( "<NAMESPACE-NAME>.servicebus.windows.net", new DefaultAzureCredential(), clientOptions); // create a processor that we can use to process the messages // TODO: Replace the <QUEUE-NAME> placeholder processor = client.CreateProcessor("<QUEUE-NAME>", new ServiceBusProcessorOptions()); try { // add handler to process messages processor.ProcessMessageAsync += MessageHandler; // add handler to process any errors processor.ProcessErrorAsync += ErrorHandler; // start processing await processor.StartProcessingAsync(); Console.WriteLine("Wait for a minute and then press any key to end the processing"); Console.ReadKey(); // stop processing Console.WriteLine("\nStopping the receiver..."); await processor.StopProcessingAsync(); Console.WriteLine("Stopped receiving messages"); } finally { // Calling DisposeAsync on client types is required to ensure that network // resources and other unmanaged objects are properly cleaned up. await processor.DisposeAsync(); await client.DisposeAsync(); }
- Vytvoří objekt ServiceBusClient pomocí objektu
Dokončená
Program
třída by měla odpovídat následujícímu kódu:using System.Threading.Tasks; using Azure.Messaging.ServiceBus; using Azure.Identity; // the client that owns the connection and can be used to create senders and receivers ServiceBusClient client; // the processor that reads and processes messages from the queue ServiceBusProcessor processor; // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // Set the transport type to AmqpWebSockets so that the ServiceBusClient uses port 443. // If you use the default AmqpTcp, make sure that ports 5671 and 5672 are open. // TODO: Replace the <NAMESPACE-NAME> and <QUEUE-NAME> placeholders var clientOptions = new ServiceBusClientOptions() { TransportType = ServiceBusTransportType.AmqpWebSockets }; client = new ServiceBusClient("<NAMESPACE-NAME>.servicebus.windows.net", new DefaultAzureCredential(), clientOptions); // create a processor that we can use to process the messages // TODO: Replace the <QUEUE-NAME> placeholder processor = client.CreateProcessor("<QUEUE-NAME>", new ServiceBusProcessorOptions()); try { // add handler to process messages processor.ProcessMessageAsync += MessageHandler; // add handler to process any errors processor.ProcessErrorAsync += ErrorHandler; // start processing await processor.StartProcessingAsync(); Console.WriteLine("Wait for a minute and then press any key to end the processing"); Console.ReadKey(); // stop processing Console.WriteLine("\nStopping the receiver..."); await processor.StopProcessingAsync(); Console.WriteLine("Stopped receiving messages"); } finally { // Calling DisposeAsync on client types is required to ensure that network // resources and other unmanaged objects are properly cleaned up. await processor.DisposeAsync(); await client.DisposeAsync(); } // handle received messages async Task MessageHandler(ProcessMessageEventArgs args) { string body = args.Message.Body.ToString(); Console.WriteLine($"Received: {body}"); // complete the message. message is deleted from the queue. await args.CompleteMessageAsync(args.Message); } // handle any errors when receiving messages Task ErrorHandler(ProcessErrorEventArgs args) { Console.WriteLine(args.Exception.ToString()); return Task.CompletedTask; }
Sestavte projekt a ujistěte se, že nedošlo k žádným chybám.
Spusťte aplikaci příjemce. Měly by se zobrazit přijaté zprávy. Stisknutím libovolné klávesy zastavte přijímač a aplikaci.
Wait for a minute and then press any key to end the processing Received: Message 1 Received: Message 2 Received: Message 3 Stopping the receiver... Stopped receiving messages
Znovu zkontrolujte portál. Počkejte několik minut a aktualizujte stránku, pokud se nezobrazují
0
aktivní zprávy.
Vyčištění prostředků
Přejděte do oboru názvů služby Service Bus na webu Azure Portal a výběrem možnosti Odstranit na webu Azure Portal odstraňte obor názvů a frontu v něm.
Viz také
Projděte si následující dokumentaci a ukázky:
- Klientská knihovna služby Azure Service Bus pro .NET – Readme
- Ukázky na GitHubu
- Referenční informace k rozhraní .NET API
- Abstrakce obav z infrastruktury s využitím architektur vyšší úrovně, jako je NServiceBus