クイック スタート:Azure portal を使用して Service Bus キューを作成するQuickstart: Use Azure portal to create a Service Bus queue

このクイックスタートでは、Service Bus キューとの間でメッセージを送受信し、Azure portal を使用してその名前空間内にメッセージング名前空間とキューを作成し、その名前空間に対する承認資格情報を取得する方法について説明します。This quickstart describes how to send and receive messages to and from a Service Bus queue, using the Azure portal to create a messaging namespace and a queue within that namespace, and to obtain the authorization credentials on that namespace. 次に、.NET Standard ライブラリを使用して、このキューからメッセージを送受信する方法について説明します。The procedure then shows how to send and receive messages from this queue using the .NET Standard library.

Service Bus キューとはWhat are Service Bus queues?

Service Bus キューは、ブローカー メッセージング通信モデルをサポートしています。Service Bus queues support a brokered messaging communication model. キューを使用すると、分散アプリケーションのコンポーネントが互いに直接通信することがなくなり、仲介者 (ブローカー) の役割を果たすキューを介してメッセージをやり取りすることになります。When using queues, components of a distributed application do not communicate directly with each other; instead they exchange messages via a queue, which acts as an intermediary (broker). メッセージ プロデューサー (送信者) はキューにメッセージを送信した後で、それまでの処理を引き続き実行します。A message producer (sender) hands off a message to the queue and then continues its processing. メッセージ コンシューマー (受信者) は、キューからメッセージを非同期に受信して処理します。Asynchronously, a message consumer (receiver) pulls the message from the queue and processes it. メッセージ プロデューサーは、それ以降のメッセージの処理と送信を続ける場合、メッセージ コンシューマーからの応答を待つ必要がありません。The producer does not have to wait for a reply from the consumer in order to continue to process and send further messages. キューでは、コンシューマーが競合している場合のメッセージ配信に先入れ先出し法 (FIFO) を使用します。Queues offer First In, First Out (FIFO) message delivery to one or more competing consumers. つまり、通常はキューに追加された順番にメッセージが受信され、処理されます。このとき、メッセージを受信して処理できるメッセージ コンシューマーは、メッセージ 1 件につき 1 つだけです。That is, messages are typically received and processed by the receivers in the order in which they were added to the queue, and each message is received and processed by only one message consumer.

QueueConcepts

Service Bus キューは汎用テクノロジであり、幅広いシナリオで使用できます。Service Bus queues are a general-purpose technology that can be used for a wide variety of scenarios:

  • 多層 Azure アプリケーションでの Web ロールと Worker ロールとの間の通信。Communication between web and worker roles in a multi-tier Azure application.
  • ハイブリッド ソリューションでのオンプレミスのアプリと Azure によってホストされるアプリケーションとの間の通信。Communication between on-premises apps and Azure-hosted apps in a hybrid solution.
  • 複数の組織で実行される分散アプリケーションまたは 1 つの組織内の異なる部署でオンプレミスで実行される分散アプリケーションのコンポーネント間の通信。Communication between components of a distributed application running on-premises in different organizations or departments of an organization.

キューを使用すると、アプリケーションのスケールがより簡単になり、アーキテクチャの復元性が高まります。Using queues enables you to scale your applications more easily, and enable more resiliency to your architecture.

前提条件Prerequisites

このチュートリアルを完了するには、以下がインストールされていることを確認してください。To complete this tutorial, make sure you have installed:

  • Azure サブスクリプション。An Azure subscription. Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成できます。If you don't have an Azure subscription, you can create a free account before you begin.
  • Visual Studio 2017 Update 3 (バージョン 15.3, 26730.01) 以降。Visual Studio 2017 Update 3 (version 15.3, 26730.01) or later. キューとの間でメッセージを送受信するサンプルを Visual Studio を使用して作成します。You use Visual Studio to build a sample that sends messages to and receives message from a queue. このサンプルの目的は、PowerShell を使用して作成したキューをテストすることです。The sample is to test the queue you created using PowerShell.
  • NET Core SDK バージョン 2.0 以降。NET Core SDK, version 2.0 or later.

Azure Portal での名前空間の作成Create a namespace in the Azure portal

Azure の Service Bus メッセージング エンティティを使用するには、Azure 全体で一意となる名前を備えた名前空間を最初に作成しておく必要があります。To begin using Service Bus messaging entities in Azure, you must first create a namespace with a name that is unique across Azure. 名前空間は、アプリケーション内で Service Bus リソースをアドレス指定するためのスコープ コンテナーを提供します。A namespace provides a scoping container for addressing Service Bus resources within your application.

名前空間を作成するには:To create a namespace:

  1. Azure ポータルSign in to the Azure portal

  2. ポータルの左側のナビゲーション ウィンドウで、 [+ リソースの作成][統合][Service Bus] の順に選択します。In the left navigation pane of the portal, select + Create a resource, select Integration, and then select Service Bus.

    [リソースの作成] -> [統合] -> [Service Bus]

  3. [名前空間の作成] ダイアログで、次の手順を実行します。In the Create namespace dialog, do the following steps:

    1. 名前空間の名前を入力します。Enter a name for the namespace. その名前が使用できるかどうかがすぐに自動で確認されます。The system immediately checks to see if the name is available. 名前空間の名前付け規則の一覧については、名前空間の作成の REST API に関する記事を参照してください。For a list of rules for naming namespaces, see Create Namespace REST API.

    2. 名前空間の価格レベル (Basic、Standard、Premium) を選択します。Select the pricing tier (Basic, Standard, or Premium) for the namespace. トピックとサブスクリプションを使用する場合は、Standard または Premium を選択してください。If you want to use topics and subscriptions, choose either Standard or Premium. Basic 価格レベルでは、トピック/サブスクリプションはサポートされていません。Topics/subscriptions are not supported in the Basic pricing tier.

    3. Premium 価格レベルを選択した場合は、次の手順を実行します。If you selected the Premium pricing tier, follow these steps:

      1. メッセージング ユニットの数を指定します。Specify the number of messaging units. Premium レベルでは、各ワークロードが分離した状態で実行されるように、CPU とメモリのレベルでリソースが分離されます。The premium tier provides resource isolation at the CPU and memory level so that each workload runs in isolation. このリソースのコンテナーをメッセージング ユニットと呼びます。This resource container is called a messaging unit. Premium 名前空間には、少なくとも 1 つのメッセージング ユニットがあります。A premium namespace has at least one messaging unit. Service Bus の Premium 名前空間ごとに、1 個、2 個、または 4 個のメッセージング ユニットを選択できます。You can select 1, 2, or 4 messaging units for each Service Bus Premium namespace. 詳細については、Service Bus の Premium メッセージングに関するページをご覧ください。For more information, see Service Bus Premium Messaging.
      2. 名前空間をゾーン冗長にするかどうかを指定します。Specify whether you want to make the namespace zone redundant. ゾーン冗長により、追加コストなしで 1 つのリージョン内の可用性ゾーンをまたいでレプリカを配置することで、可用性を高めることができます。The zone redundancy provides enhanced availability by spreading replicas across availability zones within one region at no additional cost. 詳細については、Azure の Availability Zones に関するページをご覧ください。For more information, see Availability zones in Azure.
    4. [サブスクリプション] で、名前空間を作成する Azure サブスクリプションを選択します。For Subscription, choose an Azure subscription in which to create the namespace.

    5. [リソース グループ] で、名前空間を追加する既存のリソース グループを選択するか、新しいリソース グループを作成します。For Resource group, choose an existing resource group in which the namespace will live, or create a new one.

    6. [場所] で、名前空間をホストするリージョンを選択します。For Location, choose the region in which your namespace should be hosted.

    7. 作成 を選択します。Select Create. これで、システムによってサービス名前空間が作成され、有効になります。The system now creates your namespace and enables it. システムがアカウントのリソースを準備し 終わるまでに、数分間かかる場合があります。You might have to wait several minutes as the system provisions resources for your account.

      [名前空間の作成]

  4. Service Bus 名前空間が正常にデプロイされていることを確認します。Confirm that the service bus namespace is deployed successfully. 通知を確認するには、ツール バーのベルのアイコン (アラート) を選択します。To see the notifications, select the bell icon (Alerts) on the toolbar. 次の図に示すように、通知内のリソース グループの名前を選択します。Select the name of the resource group in the notification as shown in the image. Service Bus 名前空間を含むリソース グループが表示されます。You see the resource group that contains the service bus namespace.

    デプロイのアラート

  5. このリソース グループの [リソース グループ] ページで、Service Bus 名前空間を選択します。On the Resource group page for your resource group, select your service bus namespace.

    [リソース グループ] ページ - Service Bus 名前空間を選択する

  6. Service Bus 名前空間のホーム ページが表示されます。You see the home page for your service bus namespace.

    Service Bus 名前空間のホーム ページ

接続文字列を取得するGet the connection string

新しい名前空間を作成すると、Shared Access Signature (SAS) の初期規則が自動的に生成され、あらゆる角度から名前空間を完全に制御することを可能にするプライマリ キーとセカンダリ キーのペアが関連付けられます。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. 通常の送信者と受信者を対象に、より権限を制限した規則を作成する方法については、「Service Bus の認証と承認」をご覧ください。See Service Bus authentication and authorization for information about how to create rules with more constrained rights for regular senders and receivers. 名前空間のプライマリ キーとセカンダリ キーをコピーするには、次の手順を実行します。To copy the primary and secondary keys for your namespace, follow these steps:

  1. [すべてのリソース] で、新しく作成した名前空間の名前をクリックします。Click All resources, then click the newly created namespace name.

  2. 名前空間ウィンドウで、 [共有アクセス ポリシー] をクリックします。In the namespace window, click Shared access policies.

  3. [共有アクセス ポリシー] 画面で、 [RootManageSharedAccessKey] をクリックします。In the Shared access policies screen, click RootManageSharedAccessKey.

    connection-info

  4. [ポリシー:RootManageSharedAccessKey] ウィンドウで、 [プライマリ接続文字列] の横にあるコピー ボタンをクリックし、後で使用するために接続文字列をクリップボードにコピーします。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. この値をメモ帳などに一時的に貼り付けます。Paste this value into Notepad or some other temporary location.

    connection-string

  5. 前の手順を繰り返し、 [プライマリ キー] の値をコピーして、後で使用するために一時的な場所に貼り付けます。Repeat the previous step, copying and pasting the value of Primary key to a temporary location for later use.

Azure portal でキューを作成するCreate a queue in the Azure portal

  1. [Service Bus 名前空間] ページで、左側のナビゲーション メニューの [キュー] を選択します。On the Service Bus Namespace page, select Queues in the left navigational menu.

  2. [キュー] ページで、ツール バーの [+ キュー] を選択します。On the Queues page, select + Queue on the toolbar.

  3. キューの名前を入力し、他の値は既定値のままにします。Enter a name for the queue, and leave the other values with their defaults.

  4. ここで、 [作成] を選択します。Now, select Create.

    [キュー] -> [+ キュー] -> 名前の入力 -> [作成]

メッセージを送受信するSend and receive messages

注意

このセクションで使用されているメッセージ送受信サンプルは、.NET のサンプルです。The sample used in this section to send and receive messages is a .NET sample. 他のプログラミング言語を使用してメッセージを送受信するサンプルについては、「Service Bus サンプル」を参照してください。For samples to send/receive messages using other programming languages, see Service Bus samples.

各種のプログラミング言語を使用してメッセージを送受信する具体的な手順については、次のクイック スタートを参照してください。For step-by-step instructions for sending/receiving messages using various programming languages, see the following quick starts:

名前空間とキューがプロビジョニングされ、必要な資格情報を持っている場合、メッセージを送受信できる状態です。After the namespace and queue are provisioned, and you have the necessary credentials, you are ready to send and receive messages. こちらの GitHub サンプル フォルダーでコードを調べることができます。You can examine the code in this GitHub sample folder.

コードを実行するには、次の手順を実行します。To run the code, do the following:

  1. 次のコマンドを発行して、Service Bus の GitHub リポジトリを複製します。Clone the Service Bus GitHub repository by issuing the following command:

    git clone https://github.com/Azure/azure-service-bus.git
    
  2. サンプル フォルダー azure-service-bus\samples\DotNet\GettingStarted\BasicSendReceiveQuickStart\BasicSendReceiveQuickStart に移動します。Navigate to the sample folder azure-service-bus\samples\DotNet\GettingStarted\BasicSendReceiveQuickStart\BasicSendReceiveQuickStart.

  3. 「管理資格情報の取得」セクションで取得した接続文字列とキュー名をコピーします。Copy the connection string and queue name you obtained in the Obtain the management credentials section.

  4. コマンド プロンプトで、次のコマンドを入力します。At a command prompt, type the following command:

    dotnet build
    
  5. bin\Debug\netcoreapp2.0 フォルダーに移動します。Navigate to the bin\Debug\netcoreapp2.0 folder.

  6. 次のコマンドを入力してプログラムを実行します。Type the following command to run the program. myConnectionString を以前に取得した値に、myQueueName を作成したキューの名前に置き換えます。Be sure to replace myConnectionString with the value you previously obtained, and myQueueName with the name of the queue you created:

    dotnet BasicSendReceiveQuickStart.dll -ConnectionString "myConnectionString" -QueueName "myQueueName"
    
  7. キューに送信され、次にキューから受信される 10 個のメッセージを観察します。Observe 10 messages being sent to the queue, and subsequently received from the queue:

    プログラムの出力

リソースのクリーンアップClean up resources

ポータルを使用して、リソース グループ、名前空間、およびキューを削除できます。You can use the portal to remove the resource group, namespace, and queue.

サンプル コードを理解するUnderstand the sample code

このセクションでは、サンプル コードの処理内容の詳細について説明します。This section contains more details about what the sample code does.

接続文字列とキューを取得するGet connection string and queue

接続文字列とキュー名は、コマンド ライン引数として Main() メソッドに渡されます。The connection string and queue name are passed to the Main() method as command-line arguments. Main() は、これらの値を保持する 2 つの文字列変数を宣言します。Main() declares two string variables to hold these values:

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

    for (int i = 0; i < args.Length; i++)
    {
        var p = new Program();
        if (args[i] == "-ConnectionString")
        {
            Console.WriteLine($"ConnectionString: {args[i+1]}");
            ServiceBusConnectionString = args[i + 1]; 
        }
        else if(args[i] == "-QueueName")
        {
            Console.WriteLine($"QueueName: {args[i+1]}");
            QueueName = args[i + 1];
        }                
    }

    if (ServiceBusConnectionString != "" && QueueName != "")
        MainAsync(ServiceBusConnectionString, QueueName).GetAwaiter().GetResult();
    else
    {
        Console.WriteLine("Specify -Connectionstring and -QueueName to execute the example.");
        Console.ReadKey();
    }                            
}

Main() メソッドは、非同期メッセージ ループ MainAsync() を開始します。The Main() method then starts the asynchronous message loop, MainAsync().

メッセージ ループMessage loop

MainAsync() メソッドで、コマンド ライン引数を使用してキュー クライアントを作成し、RegisterOnMessageHandlerAndReceiveMessages() という受信メッセージ ハンドラーを呼び出し、一連のメッセージを送信します。The MainAsync() method creates a queue client with the command-line arguments, calls a receiving message handler named RegisterOnMessageHandlerAndReceiveMessages(), and sends the set of messages:

static async Task MainAsync(string ServiceBusConnectionString, string QueueName)
{
    const int numberOfMessages = 10;
    queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

    Console.WriteLine("======================================================");
    Console.WriteLine("Press any key to exit after receiving all the messages.");
    Console.WriteLine("======================================================");

    // Register QueueClient's MessageHandler and receive messages in a loop
    RegisterOnMessageHandlerAndReceiveMessages();

    // Send Messages
    await SendMessagesAsync(numberOfMessages);

    Console.ReadKey();

    await queueClient.CloseAsync();
}

RegisterOnMessageHandlerAndReceiveMessages() メソッドで、いくつかのメッセージ ハンドラー オプションを設定し、次にキュー クライアントの RegisterMessageHandler() メソッドを呼び出し、受信を開始します。The RegisterOnMessageHandlerAndReceiveMessages() method simply sets a few message handler options, then calls the queue client's RegisterMessageHandler() method, which starts the receiving:

static void RegisterOnMessageHandlerAndReceiveMessages()
{
    // Configure the MessageHandler Options in terms of exception handling, number of concurrent messages to deliver etc.
    var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
    {
        // Maximum number of Concurrent calls to the callback `ProcessMessagesAsync`, set to 1 for simplicity.
        // Set it according to how many messages the application wants to process in parallel.
        MaxConcurrentCalls = 1,

        // Indicates whether MessagePump should automatically complete the messages after returning from User Callback.
        // False below indicates the Complete will be handled by the User Callback as in `ProcessMessagesAsync` below.
        AutoComplete = false
    };

    // Register the function that will process messages
    queueClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
} 

メッセージを送信するSend messages

メッセージの作成と送信操作は、SendMessagesAsync() メソッドで行われます。The message creation and send operations occur in the SendMessagesAsync() method:

static async Task SendMessagesAsync(int numberOfMessagesToSend)
{
    try
    {
        for (var i = 0; i < numberOfMessagesToSend; i++)
        {
            // Create a new message to send to the queue
            string messageBody = $"Message {i}";
            var message = new Message(Encoding.UTF8.GetBytes(messageBody));

            // Write the body of the message to the console
            Console.WriteLine($"Sending message: {messageBody}");

            // Send the message to the queue
            await queueClient.SendAsync(message);
        }
    }
    catch (Exception exception)
    {
        Console.WriteLine($"{DateTime.Now} :: Exception: {exception.Message}");
    }
}

メッセージを処理するProcess messages

ProcessMessagesAsync() メソッドで、メッセージの受信の確認、処理、および完了を行います。The ProcessMessagesAsync() method acknowledges, processes, and completes the receipt of the messages:

static async Task ProcessMessagesAsync(Message message, CancellationToken token)
{
    // Process the message
    Console.WriteLine($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} Body:{Encoding.UTF8.GetString(message.Body)}");

    // Complete the message so that it is not received again.
    await queueClient.CompleteAsync(message.SystemProperties.LockToken);
}

注意

Service Bus リソースは、Service Bus Explorer で管理できます。You can manage Service Bus resources with Service Bus Explorer. Service Bus Explorer を使用すると、ユーザーは Service Bus 名前空間に接続し、簡単な方法でメッセージング エンティティを管理できます。The Service Bus Explorer allows users to connect to a Service Bus namespace and administer messaging entities in an easy manner. このツールには、インポート/エクスポート機能や、トピック、キュー、サブスクリプション、リレー サービス、通知ハブ、イベント ハブをテストする機能などの高度な機能が用意されています。The tool provides advanced features like import/export functionality or the ability to test topic, queues, subscriptions, relay services, notification hubs and events hubs.

次の手順Next steps

この記事では、キューでメッセージを送受信するために必要な Service Bus 名前空間と他のリソースを作成しました。In this article, you created a Service Bus namespace and other resources required to send and receive messages from a queue. メッセージを送受信するコードの作成についてさらに詳しく学習するには、「メッセージを送受信する」セクションのチュートリアルに進んでください。To learn more about writing code to send and receive messages, continue to the tutorials in the Send and receive messages section.