Kurz: Aktualizovat inventáře pomocí webu Azure portal a témata nebo předplatnáTutorial: Update inventory using Azure portal and topics/subscriptions

Microsoft Azure Service Bus je víceklientská cloudová služba pro zasílání zpráv, která odesílá informace mezi aplikacemi a službami.Microsoft Azure Service Bus is a multi-tenant cloud messaging service that sends information between applications and services. Asynchronní operace umožňují flexibilní zprostředkované zasílání zpráv a také strukturované zasílání zpráv typu FIFO (first-in-first-out) a funkce pro publikování a přihlášení k odběru.Asynchronous operations give you flexible, brokered messaging, along with structured first-in, first-out (FIFO) messaging, and publish/subscribe capabilities. Tento kurz ukazuje, jak můžete témata a odběry ve službě Service Bus využít ve scénáři aktualizace maloobchodních zásob. Pracuje se při tom s kanály publikování a přihlášení k odběru s využitím portálu Azure Portal a rozhraní .NET.This tutorial shows how to use Service Bus topics and subscriptions in a retail inventory scenario, with publish/subscribe channels using the Azure portal and .NET.

V tomto kurzu se naučíte:In this tutorial, you learn how to:

  • Pomocí portálu Azure Portal vytvořit téma služby Service Bus a k němu jeden nebo více odběrůCreate a Service Bus topic and one or more subscriptions to that topic using the Azure portal
  • Přidávat filtry témat pomocí kódu .NETAdd topic filters using .NET code
  • Vytvořit dvě zprávy s různým obsahemCreate two messages with different content
  • Odeslat zprávy a ověřit, že dorazily do očekávaných odběrůSend the messages and verify they arrived in the expected subscriptions
  • Přijímat zprávy z odběrůReceive messages from the subscriptions

V tomto scénáři pracujeme s příkladem aktualizace sortimentu zásob pro několik prodejen.An example of this scenario is an inventory assortment update for multiple retail stores. Každá prodejna nebo sada prodejen v našem příkladu přijímá zprávy s pokyny, jak konkrétně má aktualizovat sortiment.In this scenario, each store, or set of stores, gets messages intended for them to update their assortments. Tento kurz vysvětluje, jak tento scénář využívající odběry a filtry implementujete.This tutorial shows how to implement this scenario using subscriptions and filters. Nejprve vytvoříte téma se třemi odběry, přidáte pravidla a filtry a potom z tématu a odběrů odešlete zprávy a přijmete je.First, you create a topic with 3 subscriptions, add some rules and filters, and then send and receive messages from the topic and subscriptions.

téma

Pokud ještě nemáte předplatné Azure, můžete si vytvořit bezplatný účet před tím, než začnete.If you don't have an Azure subscription, you can create a free account before you begin.

PožadavkyPrerequisites

Před tímto kurzem se ujistěte, že máte nainstalované tyto položky:To complete this tutorial, make sure you have installed:

Témata a odběry služby Service BusService Bus topics and subscriptions

Každý odběr tématu může přijímat kopie všech zpráv.Each subscription to a topic can receive a copy of each message. Témata jsou co do protokolu a sémantiky plně kompatibilní s frontami služby Service Bus.Topics are fully protocol and semantically compatible with Service Bus queues. Témata služby Service Bus podporují širokou škálu pravidel pro výběr s podmínkami filtrů, včetně volitelných akcí, kterými se nastavují nebo upravují vlastnosti zprávy.Service Bus topics support a wide array of selection rules with filter conditions, with optional actions that set or modify message properties. Při každé shodě s pravidlem se vytvoří zpráva.Each time a rule matches, it produces a message. Další informace o pravidlech, filtrech a akcích získáte pomocí tohoto odkazu.To learn more about rules, filters, and actions, follow this link.

Vytvoření oboru názvů na webu Azure PortalCreate a namespace in the 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.To begin using Service Bus messaging entities in Azure, you must first create a namespace with a name that is unique across Azure. Obor názvů poskytuje kontejner oboru pro adresování prostředků služby Service Bus v rámci vaší aplikace.A namespace provides a scoping container for addressing Service Bus resources within your application.

Vytvoření oboru názvů:To create a namespace:

  1. Přihlaste se k portálu Azure Portal.Sign in to the Azure portal

  2. V levém navigačním podokně portálu vyberte + vytvořit prostředekvyberte integracea pak vyberte služby Service Bus.In the left navigation pane of the portal, select + Create a resource, select Integration, and then select Service Bus.

    Vytvořit prostředek -> integrace -> služby Service Bus

  3. V vytvoření oboru názvů dialogového okna, proveďte následující kroky:In the Create namespace dialog, do the following steps:

    1. Zadejte název pro obor názvů.Enter a name for the namespace. Systém okamžitě kontroluje, jestli je název dostupný.The system immediately checks to see if the name is available. Seznam pravidel pro pojmenování obory názvů, naleznete v tématu REST API vytvořte Namespace.For a list of rules for naming namespaces, see Create Namespace REST API.

    2. Vyberte cenovou úroveň (Basic, Standard nebo Premium) pro obor názvů.Select the pricing tier (Basic, Standard, or Premium) for the namespace. Pokud chcete použít témata a odběry, zvolit úroveň Standard nebo Premium.If you want to use topics and subscriptions, choose either Standard or Premium. Témata/předplatná se v cenové úrovni Basic nepodporují.Topics/subscriptions are not supported in the Basic pricing tier.

    3. Pokud jste vybrali Premium cenovou úroveň, postupujte podle těchto kroků:If you selected the Premium pricing tier, follow these steps:

      1. Zadejte počet jednotky zasílání zpráv.Specify the number of messaging units. Úroveň premium zajišťuje izolaci prostředků na úrovni procesoru a paměti, takže každá úloha běží izolovaně.The premium tier provides resource isolation at the CPU and memory level so that each workload runs in isolation. Kontejner prostředků se nazývá jednotka zasílání zpráv.This resource container is called a messaging unit. Obor názvů úrovně premium má alespoň jedna jednotka zasílání zpráv.A premium namespace has least one messaging unit. Můžete vybrat 1, 2 nebo 4 jednotky zasílání zpráv pro každý obor názvů Service Bus úrovně Premium.You can select 1, 2, or 4 messaging units for each Service Bus Premium namespace. Další informace najdete v tématu služby zasílání zpráv Service Bus úrovně Premium.For more information, see Service Bus Premium Messaging.
      2. Určete, jestli chcete vytvořit obor názvů zónově redundantní.Specify whether you want to make the namespace zone redundant. Redundanci zón poskytuje vylepšenou dostupnost šířením replik napříč zónami dostupnosti v rámci jedné oblasti bez dalších poplatků.The zone redundancy provides enhanced availability by spreading replicas across availability zones within one region at no additional cost. Další informace najdete v tématu zón dostupnosti v Azure.For more information, see Availability zones in Azure.
    4. Pro předplatné, zvolte předplatné Azure, ve kterém chcete vytvořit obor názvů.For Subscription, choose an Azure subscription in which to create the namespace.

    5. Pro skupiny prostředků, zvolte existující skupinu prostředků, ve které bude obor názvů live, nebo vytvořte novou.For Resource group, choose an existing resource group in which the namespace will live, or create a new one.

    6. Pro umístění, vyberte oblast, ve kterém by měl váš obor názvů hostovat.For Location, choose the region in which your namespace should be hosted.

    7. Vyberte Vytvořit.Select Create. Systém teď vytvoří obor názvů a povolí ho.The system now creates your namespace and enables it. Pravděpodobně budete muset několik minut počkat, než systém zřídí prostředky pro váš účet.You might have to wait several minutes as the system provisions resources for your account.

      Vytvoření oboru názvů

  4. Potvrďte, že je obor názvů služby Service bus úspěšné nasazení.Confirm that the service bus namespace is deployed successfully. Pokud chcete zobrazit oznámení, vyberte ikonu zvonku (výstrahy) na panelu nástrojů.To see the notifications, select the bell icon (Alerts) on the toolbar. Vyberte název skupiny prostředků v oznámení, jak je znázorněno na obrázku.Select the name of the resource group in the notification as shown in the image. Zobrazí se skupiny prostředků, který obsahuje obor názvů služby Service bus.You see the resource group that contains the service bus namespace.

    Výstraha nasazení

  5. Na skupiny prostředků stránce vaší skupiny prostředků, vyberte vaše obor názvů služby Service bus.On the Resource group page for your resource group, select your service bus namespace.

    Skupina prostředků stránce – Výběr oboru názvů služby service bus

  6. Zobrazí domovská stránka pro váš obor názvů služby Service bus.You see the home page for your service bus namespace.

    Domovská stránka oboru názvů služby service bus

Získání připojovacího řetězceGet the connection string

Vytvořením nového oboru názvů se automaticky vygeneruje počáteční pravidlo sdíleného přístupového podpisu (SAS) s přidruženým párem primárního a sekundárního klíče, které udělují úplnou kontrolu nad všemi aspekty tohoto oboru názvů.Creating a new namespace automatically generates an initial Shared Access Signature (SAS) rule with an associated pair of primary and secondary keys that each grant full control over all aspects of the namespace. Zobrazit ověřování a autorizace Service Bus informace o tom, jak vytvořit pravidla s větším omezeného práva pro pravidelné odesílateli a příjemci.See Service Bus authentication and authorization for information about how to create rules with more constrained rights for regular senders and receivers. Pokud chcete zkopírovat primární a sekundární klíče pro váš obor názvů, postupujte takto:To copy the primary and secondary keys for your namespace, follow these steps:

  1. Klikněte na Všechny prostředky a pak klikněte na název nově vytvořeného oboru názvů.Click All resources, then click the newly created namespace name.

  2. V okně oboru názvů klikněte na Zásady sdíleného přístupu.In the namespace window, click Shared access policies.

  3. Na obrazovce Zásady sdíleného přístupu klikněte na RootManageSharedAccessKey.In the Shared access policies screen, click RootManageSharedAccessKey.

    connection-info

  4. V zásad: RootManageSharedAccessKey okna, klikněte na tlačítko kopírování vedle primární připojovací řetězec, zkopírujte připojovací řetězec do schránky pro pozdější použití.In the Policy: RootManageSharedAccessKey window, click the copy button next to Primary Connection String, to copy the connection string to your clipboard for later use. Vložte tuto hodnotu do Poznámkového bloku nebo jiného dočasného umístění.Paste this value into Notepad or some other temporary location.

    connection-string

  5. Opakujte předchozí krok, zkopírujte si hodnotu pro primární klíč a vložte ji do dočasného umístění pro pozdější použití.Repeat the previous step, copying and pasting the value of Primary key to a temporary location for later use.

Vytvoření tématu pomocí webu Azure PortalCreate a topic using the Azure portal

  1. Na služby Service Bus Namespace stránce témata v nabídce vlevo.On the Service Bus Namespace page, select Topics on the left menu.

  2. Vyberte + téma na panelu nástrojů.Select + Topic on the toolbar.

  3. Zadejte název tématu.Enter a name for the topic. U ostatních možností ponechte jejich výchozí hodnoty.Leave the other options with their default values.

  4. Vyberte Vytvořit.Select Create.

    Vytvořit téma

Vytvořit odběry tématuCreate subscriptions to the topic

  1. Vyberte tématu , kterou jste vytvořili v předchozí části.Select the topic that you created in the previous section.

    Vyberte téma

  2. Na téma služby Service Bus stránce předplatná v levé nabídce a pak vyberte + odběr na panelu nástrojů.On the Service Bus Topic page, select Subscriptions from the left menu, and then select + Subscription on the toolbar.

    Přidejte tlačítko předplatné

  3. Na vytvořit odběr zadejte S1 pro název pro dané předplatné a pak vyberte vytvořit.On the Create subscription page, enter S1 for name for the subscription, and then select Create.

    Vytvoření odběru stránky

  4. Opakujte předchozí krok dvakrát pro vytvoření předplatných s názvem S2 a S3.Repeat the previous step twice to create subscriptions named S2 and S3.

Vytvoření pravidel filtrů u odběrůCreate filter rules on subscriptions

Pokud zřídíte obor názvů a téma s odběry a máte potřebná pověření, můžete u odběrů vytvořit pravidla filtrů a poté odesílat a přijímat zprávy.After the namespace and topic/subscriptions are provisioned, and you have the necessary credentials, you are ready to create filter rules on the subscriptions, then send and receive messages. Kód můžete zkontrolovat v této složce s ukázkami na GitHubu.You can examine the code in this GitHub sample folder.

Odesílání a příjem zprávSend and receive messages

Kód spustíte následovně:To run the code, do the following:

  1. V příkazovém řádku nebo v příkazovém řádku PowerShellu naklonujte pomocí následujícího příkazu úložiště Service Bus na GitHubu:In a command prompt or PowerShell prompt, clone the Service Bus GitHub repository by issuing the following command:

    git clone https://github.com/Azure/azure-service-bus.git
    
  2. Přejděte do složky s ukázkou azure-service-bus\samples\DotNet\GettingStarted\BasicSendReceiveTutorialwithFilters.Navigate to the sample folder azure-service-bus\samples\DotNet\GettingStarted\BasicSendReceiveTutorialwithFilters.

  3. Získání připojovacího řetězce, který jste zkopírovali do poznámkového bloku v získat části přihlašovací údaje pro správu v tomto kurzu.Obtain the connection string you copied to Notepad in the Obtain the management credentials section of this tutorial. Budete potřebovat také název tématu, které jste vytvořili v předchozí části.You also need the name of the topic you created in the previous section.

  4. Do příkazového řádku zadejte následující příkaz:At the command prompt, type the following command:

    dotnet build
    
  5. Přejděte do složky BasicSendReceiveTutorialwithFilters\bin\Debug\netcoreapp2.0.Navigate to the BasicSendReceiveTutorialwithFilters\bin\Debug\netcoreapp2.0 folder.

  6. Zadáním následujícího příkazu spusťte program.Type the following command to run the program. myConnectionString nezapomeňte nahradit hodnotou, kterou jste předtím získali, a myTopicName názvem tématu, které jste vytvořili:Be sure to replace myConnectionString with the value you previously obtained, and myTopicName with the name of the topic you created:

    dotnet BasicSendReceiveTutorialwithFilters.dll -ConnectionString "myConnectionString" -TopicName "myTopicName"
    
  7. Podle pokynů v konzole nejprve vyberte vytvoření filtru.Follow the instructions in the console to select filter creation first. Součástí vytváření filtrů je odebrání výchozích filtrů.Part of creating filters is to remove the default filters. Pokud používáte prostředí PowerShell nebo rozhraní příkazového řádku, nemusíte výchozí filtr odebírat, pokud ale pracujete v kódu, je to nutné.When you use PowerShell or CLI you don't need to remove the default filter, but if you do this in code, you must remove them. Příkazy konzoly 1 a 3 vám pomůžou se správou filtrů u odběrů, které jste už vytvořili:The console commands 1 and 3 help you manage the filters on the subscriptions you previously created:

    • Příkaz 1 slouží k odebrání výchozích filtrů.Execute 1: to remove the default filters.

    • Příkazem 2 můžete přidat vlastní filtry.Execute 2: to add your own filters.

    • Příkaz 3 umožňuje volitelně odebrat vlastní filtry.Execute 3: to optionally remove your own filters. Upozorňujeme, že tímto krokem se znovu nevytvoří výchozí filtry.Note that this will not recreate the default filters.

      Na obrázku je vidět výstup příkazu 2

  8. Po vytvoření filtru můžete odesílat zprávy.After filter creation, you can send messages. Stiskněte klávesu 4 a sledujte, jak se do tématu odešle 10 zpráv:Press 4 and observe 10 messages being sent to the topic:

    Výstup odeslání

  9. Stiskněte klávesu 5 a sledujte příjem zprávy.Press 5 and observe the messages being received. Pokud se vám nevrátilo 10 zpráv, zobrazte klávesou „m“ nabídku a pak stiskněte klávesu 5 znovu.If you did not get 10 messages back, press "m" to display the menu, then press 5 again.

    Výstup příjmu

Vyčištění prostředkůClean up resources

Pokud už obor názvů a frontu nepotřebujete, odstraňte je.When no longer needed, delete the namespace and queue. Uděláte to tak, že prostředky vyberete na portálu a kliknete na Odstranit.To do so, select these resources on the portal and click Delete.

Vysvětlení vzorového kóduUnderstand the sample code

Tato část obsahuje další podrobnosti o chování ukázkového kódu.This section contains more details about what the sample code does.

Získání připojovacího řetězce a tématuGet connection string and topic

Nejprve kód deklaruje sadu proměnných, které řídí další provádění programu.First, the code declares a set of variables, which drive the remaining execution of the program.

string ServiceBusConnectionString;
string TopicName;

static string[] Subscriptions = { "S1", "S2", "S3" };
static IDictionary<string, string[]> SubscriptionFilters = new Dictionary<string, string[]> {
    { "S1", new[] { "StoreId IN('Store1', 'Store2', 'Store3')", "StoreId = 'Store4'"} },
    { "S2", new[] { "sys.To IN ('Store5','Store6','Store7') OR StoreId = 'Store8'" } },
    { "S3", new[] { "sys.To NOT IN ('Store1','Store2','Store3','Store4','Store5','Store6','Store7','Store8') OR StoreId NOT IN ('Store1','Store2','Store3','Store4','Store5','Store6','Store7','Store8')" } }
};
// You can have only have one action per rule and this sample code supports only one action for the first filter, which is used to create the first rule. 
static IDictionary<string, string> SubscriptionAction = new Dictionary<string, string> {
    { "S1", "" },
    { "S2", "" },
    { "S3", "SET sys.Label = 'SalesEvent'"  }
};
static string[] Store = { "Store1", "Store2", "Store3", "Store4", "Store5", "Store6", "Store7", "Store8", "Store9", "Store10" };
static string SysField = "sys.To";
static string CustomField = "StoreId";
static int NrOfMessagesPerStore = 1; // Send at least 1.

Připojovací řetězec a název tématu se předají prostřednictvím parametrů příkazového řádku, jak je vidět v ukázce, a pak se načtou v metodě Main():The connection string and topic name are passed in via command line parameters as shown, and then are read in the Main() method:

static void Main(string[] args)
{
    string ServiceBusConnectionString = "";
    string TopicName = "";

    for (int i = 0; i < args.Length; i++)
    {
        if (args[i] == "-ConnectionString")
        {
            Console.WriteLine($"ConnectionString: {args[i + 1]}");
            ServiceBusConnectionString = args[i + 1]; // Alternatively enter your connection string here.
        }
        else if (args[i] == "-TopicName")
        {
            Console.WriteLine($"TopicName: {args[i + 1]}");
            TopicName = args[i + 1]; // Alternatively enter your queue name here.
        }
    }

    if (ServiceBusConnectionString != "" && TopicName != "")
    {
        Program P = StartProgram(ServiceBusConnectionString, TopicName);
        P.PresentMenu().GetAwaiter().GetResult();
    }
    else
    {
        Console.WriteLine("Specify -Connectionstring and -TopicName to execute the example.");
        Console.ReadKey();
    }
}

Odebrání výchozích filtrůRemove default filters

Při vytváření odběru pro něj služba Service Bus vytvoří výchozí filtr.When you create a subscription, Service Bus creates a default filter per subscription. Ten umožňuje příjem všech zpráv odeslaných do tématu.This filter enables receiving every message sent to the topic. Pokud chcete použít vlastní filtry, můžete výchozí filtr odebrat, jak je vidět v následujícím kódu:If you want to use custom filters, you can remove the default filter, as shown in the following code:

private async Task RemoveDefaultFilters()
{
    Console.WriteLine($"Starting to remove default filters.");

    try
    {
        foreach (var subscription in Subscriptions)
        {
            SubscriptionClient s = new SubscriptionClient(ServiceBusConnectionString, TopicName, subscription);
            await s.RemoveRuleAsync(RuleDescription.DefaultRuleName);
            Console.WriteLine($"Default filter for {subscription} has been removed.");
            await s.CloseAsync();
        }

        Console.WriteLine("All default Rules have been removed.\n");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }

    await PresentMenu();
}

Vytváření filtrůCreate filters

Následujícím kódem přidáte vlastní filtry definované v tomto kurzu:The following code adds the custom filters defined in this tutorial:

private async Task CreateCustomFilters()
{
    try
    {
        for (int i = 0; i < Subscriptions.Length; i++)
        {
            SubscriptionClient s = new SubscriptionClient(ServiceBusConnectionString, TopicName, Subscriptions[i]);
            string[] filters = SubscriptionFilters[Subscriptions[i]];
            if (filters[0] != "")
            {
                int count = 0;
                foreach (var myFilter in filters)
                {
                    count++;

                    string action = SubscriptionAction[Subscriptions[i]];
                    if (action != "")
                    {
                        await s.AddRuleAsync(new RuleDescription
                        {
                            Filter = new SqlFilter(myFilter),
                            Action = new SqlRuleAction(action),
                            Name = $"MyRule{count}"
                        });
                    }
                    else
                    {
                        await s.AddRuleAsync(new RuleDescription
                        {
                            Filter = new SqlFilter(myFilter),
                            Name = $"MyRule{count}"
                        });
                    }
                }
            }

            Console.WriteLine($"Filters and actions for {Subscriptions[i]} have been created.");
        }

        Console.WriteLine("All filters and actions have been created.\n");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }

    await PresentMenu();
}

Odebrání vašich vlastních filtrůRemove your custom created filters

Pokud u odběru chcete odebrat všechny filtry, použijte následující kód:If you want to remove all filters on your subscription, the following code shows how to do that:

private async Task CleanUpCustomFilters()
{
    foreach (var subscription in Subscriptions)
    {
        try
        {
            SubscriptionClient s = new SubscriptionClient(ServiceBusConnectionString, TopicName, subscription);
            IEnumerable<RuleDescription> rules = await s.GetRulesAsync();
            foreach (RuleDescription r in rules)
            {
                await s.RemoveRuleAsync(r.Name);
                Console.WriteLine($"Rule {r.Name} has been removed.");
            }
            await s.CloseAsync();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }
    Console.WriteLine("All default filters have been removed.\n");

    await PresentMenu();
}

Odesílání zprávSend messages

Odeslání zprávy do tématu je podobné jako odesílání zpráv do fronty.Sending messages to a topic is similar to sending messages to a queue. Tento příklad ukazuje, jak odesílat zprávy pomocí seznamu úloh a asynchronního zpracování:This example shows how to send messages, using a task list and asynchronous processing:

public async Task SendMessages()
{
    try
    {
        TopicClient tc = new TopicClient(ServiceBusConnectionString, TopicName);

        var taskList = new List<Task>();
        for (int i = 0; i < Store.Length; i++)
        {
            taskList.Add(SendItems(tc, Store[i]));
        }

        await Task.WhenAll(taskList);
        await tc.CloseAsync();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
    Console.WriteLine("\nAll messages sent.\n");
}

private async Task SendItems(TopicClient tc, string store)
{
    for (int i = 0; i < NrOfMessagesPerStore; i++)
    {
        Random r = new Random();
        Item item = new Item(r.Next(5), r.Next(5), r.Next(5));

        // Note the extension class which is serializing an deserializing messages
        Message message = item.AsMessage();
        message.To = store;
        message.UserProperties.Add("StoreId", store);
        message.UserProperties.Add("Price", item.getPrice().ToString());
        message.UserProperties.Add("Color", item.getColor());
        message.UserProperties.Add("Category", item.getItemCategory());

        await tc.SendAsync(message);
        Console.WriteLine($"Sent item to Store {store}. Price={item.getPrice()}, Color={item.getColor()}, Category={item.getItemCategory()}"); ;
    }
}

Příjem zprávReceive messages

Zprávy se přijímají zase prostřednictvím seznamu úloh a kód využívá dávkové zpracování.Messages are again received via a task list, and the code uses batching. Pomocí dávkování můžete zprávy odesílat i přijímat, tento příklad ale ukazuje jenom postup při dávkovém příjmu.You can send and receive using batching, but this example only shows how to batch receive. Ve skutečnosti byste smyčku nepřerušovali, ale ponechali opakování ve smyčce a nastavili vyšší časový interval, třeba jednu minutu.In reality, you would not break out of the loop, but keep looping and set a higher timespan, such as one minute. Příjem volání u zprostředkovatele zůstává po tuto dobu otevřený a pokud dorazí zprávy, jsou okamžitě vráceny a je vydán nový příjem volání.The receive call to the broker is kept open for this amount of time and if messages arrive, they are returned immediately and a new receive call is issued. Tato technika se označuje jako dlouhé intervaly dotazování.This concept is called long polling. Častěji se používá zdroj přijímaných zpráv, jak můžete vidět v příručce Rychlý start a v několika dalších ukázkách v úložišti.Using the receive pump which you can see in the quickstart, and in several other samples in the repository, is a more typical option.

public async Task Receive()
{
    var taskList = new List<Task>();
    for (var i = 0; i < Subscriptions.Length; i++)
    {
        taskList.Add(this.ReceiveMessages(Subscriptions[i]));
    }

    await Task.WhenAll(taskList);
}

private async Task ReceiveMessages(string subscription)
{
    var entityPath = EntityNameHelper.FormatSubscriptionPath(TopicName, subscription);
    var receiver = new MessageReceiver(ServiceBusConnectionString, entityPath, ReceiveMode.PeekLock, RetryPolicy.Default, 100);

    while (true)
    {
        try
        {
            IList<Message> messages = await receiver.ReceiveAsync(10, TimeSpan.FromSeconds(2));
            if (messages.Any())
            {
                foreach (var message in messages)
                {
                    lock (Console.Out)
                    {
                        Item item = message.As<Item>();
                        IDictionary<string, object> myUserProperties = message.UserProperties;
                        Console.WriteLine($"StoreId={myUserProperties["StoreId"]}");

                        if (message.Label != null)
                        {
                            Console.WriteLine($"Label={message.Label}");
                        }

                        Console.WriteLine(
                            $"Item data: Price={item.getPrice()}, Color={item.getColor()}, Category={item.getItemCategory()}");
                    }

                    await receiver.CompleteAsync(message.SystemProperties.LockToken);
                }
            }
            else
            {
                break;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }

    await receiver.CloseAsync();
}

Poznámka

Můžete spravovat prostředky služby Service Bus s Service Bus Exploreru.You can manage Service Bus resources with Service Bus Explorer. Service Bus Exploreru umožňuje uživatelům připojit k oboru názvů služby Service Bus a správě entit pro zasílání zpráv snadno způsobem.The Service Bus Explorer allows users to connect to a Service Bus namespace and administer messaging entities in an easy manner. Tento nástroj nabízí pokročilé funkce, například funkce importu/exportu nebo možnost otestovat tématu, fronty, předplatná, služby pro přenos přes, notification hubs a centra událostí.The tool provides advanced features like import/export functionality or the ability to test topic, queues, subscriptions, relay services, notification hubs and events hubs.

Další postupNext steps

V tomto kurzu jste zřídili prostředky na portálu Azure Portal a poté odesílali a přijímali zprávy z tématu služby Service Bus a jeho odběrů.In this tutorial, you provisioned resources using the Azure portal, then sent and received messages from a Service Bus topic and its subscriptions. Naučili jste se tyto postupy:You learned how to:

  • Pomocí portálu Azure Portal vytvořit téma služby Service Bus a k němu jeden nebo více odběrůCreate a Service Bus topic and one or more subscriptions to that topic using the Azure portal
  • Přidávat filtry témat pomocí kódu .NETAdd topic filters using .NET code
  • Vytvořit dvě zprávy s různým obsahemCreate two messages with different content
  • Odeslat zprávy a ověřit, že dorazily do očekávaných odběrůSend the messages and verify they arrived in the expected subscriptions
  • Přijímat zprávy z odběrůReceive messages from the subscriptions

Pokud vás zajímají další příklady odesílání a přijímání zpráv, pomůžou vám začít ukázky služby Service Bus na GitHubu.For more examples of sending and receiving messages, get started with the Service Bus samples on GitHub.

Přejděte k dalšímu kurzu, kde se dozvíte více o možnostech publikování a přihlášení k odběru ve službě Service Bus.Advance to the next tutorial to learn more about using the publish/subscribe capabilities of Service Bus.