次の方法で共有


Ruby から Queue Storage を使用する方法

ヒント

Microsoft Azure Storage Explorer を試す

Microsoft Azure ストレージ エクスプローラーは、Windows、macOS、Linux で Azure Storage のデータを視覚的に操作できる Microsoft 製の無料のスタンドアロン アプリです。

概要

このガイドでは、Microsoft Azure Queue Storage サービスを使用して一般的なシナリオを実行する方法について説明します。 サンプルは、Ruby Azure API を使用して記述されています。 対象となるシナリオには、キュー メッセージ の挿入ピーク取得削除 のほか、 キューの作成と削除が含まれます。

Queue Storage とは

Azure Queue Storage は、HTTP または HTTPS を使用して認証された呼び出しを介して世界中のどこからでもアクセスできる多数のメッセージを格納するためのサービスです。 1 つのキュー メッセージのサイズは最大 64 KB で、キューにはストレージ アカウントの合計容量制限まで、数百万のメッセージを含めることができます。 キュー ストレージは、非同期的に処理する作業のバックログを作成するためによく使用されます。

キューサービスの概念

Azure Queue サービスには、次のコンポーネントが含まれています。

Azure Queue サービス コンポーネント

  • #B0 ストレージ アカウント: #C1 Azure Storage へのすべてのアクセスは、ストレージ アカウントを介して行われます。 ストレージ アカウントの詳細については、「ストレージ アカウントの概要」を参照してください。

  • キュー: キューは、メッセージのセットを格納します。 すべてのメッセージはキューに 格納されている必要があります。 キュー名は小文字で入力する必要があります。 キューの名前付け規則については、「 Naming Queues and Metadata (キューとメタデータの名前付け規則)」を参照してください。

  • メッセージ: 形式を問わず、メッセージのサイズは最大で 64 KB です。 メッセージがキューに残ることができる最大時間は 7 日間です。 バージョン 2017-07-29 以降では、最大有効期間を任意の正の数にすることができます。また、-1 は、メッセージが期限切れにならないことを示します。 このパラメーターを省略すると、既定の有効期間は 7 日になります。

  • URL 形式: キューは、次の URL 形式を使用してアドレス指定できます: http://.queue.core.windows.net/<storage account>

    次の URL は、図内のキューをアドレス指定します。

    http://myaccount.queue.core.windows.net/incoming-orders

Azure Storage アカウントを作成する

最初の Azure ストレージ アカウントを作成する最も簡単な方法は、Azure portalを使用することです。 詳細については、「 ストレージ アカウントの作成」を参照してください。

Azure PowerShell 、Azure CLI 、または .NET Azure Storage Resource Provider使用して、Azure ストレージ アカウントを作成することもできます。

現時点で Azure でストレージ アカウントを作成しない場合は、Azurite ストレージ エミュレーターを使用して、ローカル環境でコードを実行してテストすることもできます。 詳細については、「ローカルの Azure Storage 開発に Azurite エミュレーターを使用する」を参照してください。

Ruby アプリケーションを作成する

Ruby アプリケーションを作成します。 手順については、「 App Service on Linux で Ruby アプリケーションを作成する」を参照してください。

ストレージにアクセスするようにアプリケーションを構成する

Azure Storage を使用するには、Ruby Azure パッケージをダウンロードして使用する必要があります。これには、ストレージ REST サービスと通信する便利なライブラリのセットが含まれています。

RubyGems を使用してパッケージを取得する

  1. PowerShell (Windows)、ターミナル (Mac)、Bash (Unix) などのコマンド ライン インターフェイスを使用します。
  2. コマンド ウィンドウに「 gem install azure 」と入力して、gem と依存関係をインストールします。

パッケージをインポートする

お気に入りのテキスト エディターを使用し、ストレージを使用する Ruby ファイルの先頭に次のコードを追加します。

require "azure"

Azure Storage 接続をセットアップする

Azure モジュールは、AZURE_STORAGE_ACCOUNT および AZURE_STORAGE_ACCESS_KEY の環境変数を読み取り、Azure Storage アカウントに接続するために必要な情報を取得します。 これらの環境変数が設定されていない場合は、次のコードで Azure::QueueService を使用する前に、アカウント情報を指定する必要があります。

Azure.config.storage_account_name = "<your azure storage account>"
Azure.config.storage_access_key = "<your Azure storage access key>"

Azure portal でクラシック または Resource Manager ストレージ アカウントからこれらの値を取得するには、次の手順を実行します。

  1. Azure Portal にログインします。
  2. 使用するストレージ アカウントに移動します。
  3. 右側の [設定] ブレードで、[ アクセス キー] をクリックします。
  4. 表示された [アクセス キー] ブレードに、アクセス キー 1 とアクセス キー 2 が表示されます。 これらのいずれかを使用できます。
  5. コピー アイコンをクリックして、キーをクリップボードにコピーします。

方法: キューを作成する

次のコードでは、キューを操作できる Azure::QueueService オブジェクトを作成します。

azure_queue_service = Azure::QueueService.new

create_queue() メソッドを使用して、指定した名前のキューを作成します。

begin
  azure_queue_service.create_queue("test-queue")
rescue
  puts $!
end

方法: キューにメッセージを挿入する

キューにメッセージを挿入するには、create_message() メソッドを使用し、新しいメッセージを作成してキューに追加します。

azure_queue_service.create_message("test-queue", "test message")

方法: 次のメッセージを確認する

peek_messages() メソッドを呼び出すことで、キューからメッセージを削除することなく、キューの先頭にあるメッセージをピークできます。 peek_messages() のデフォルトでは、1 つのメッセージを確認します。 ピークするメッセージの数を指定することもできます。

result = azure_queue_service.peek_messages("test-queue",
  {:number_of_messages => 10})

方法: 次のメッセージをデキューする

2 つの手順でキューからメッセージを削除できます。

  1. list_messages()を呼び出すと、既定でキューに次のメッセージが表示されます。 取得するメッセージの数を指定することもできます。 list_messages()から返されたメッセージは、このキューからメッセージを読み取る他のコードからは見えなくなります。 可視性タイムアウトをパラメーターとして秒単位で渡します。
  2. キューからのメッセージの削除を完了するには、delete_message()も呼び出す必要があります。

メッセージを削除するこの 2 段階のプロセスにより、ハードウェアまたはソフトウェアの障害が原因でコードでメッセージの処理が失敗した場合、コードの別のインスタンスが同じメッセージを取得して、もう一度やり直すことができます。 コードは、メッセージが処理された直後に delete_message() 呼び出します。

messages = azure_queue_service.list_messages("test-queue", 30)
azure_queue_service.delete_message("test-queue",
  messages[0].id, messages[0].pop_receipt)

方法: キューに登録されたメッセージの内容を変更する

キュー内のメッセージの内容をその場で変更できます。 次のコードでは、update_message() メソッドを使用してメッセージを更新します。 このメソッドは、キュー メッセージのポップ レシートと、メッセージがキューに表示されるタイミングを表す UTC DateTime 値を含むタプルを返します。

message = azure_queue_service.list_messages("test-queue", 30)
pop_receipt, time_next_visible = azure_queue_service.update_message(
  "test-queue", message.id, message.pop_receipt, "updated test message",
  30)

方法: メッセージのデキューに関するその他のオプション

キューからのメッセージの取得をカスタマイズする方法は 2 つあります。

  1. メッセージのバッチを取得できます。
  2. 非表示タイムアウトを長くまたは短く設定できるため、コードで各メッセージを完全に処理する時間を増減できます。

次のコード例では、 list_messages() メソッドを使用して、1 回の呼び出しで 15 個のメッセージを取得します。 次に、各メッセージを出力して削除します。 また、各メッセージの非表示タイムアウトを 5 分に設定します。

azure_queue_service.list_messages("test-queue", 300
  {:number_of_messages => 15}).each do |m|
  puts m.message_text
  azure_queue_service.delete_message("test-queue", m.id, m.pop_receipt)
end

方法: キューの長さを取得する

キュー内のメッセージ数の見積もりを取得できます。 get_queue_metadata() メソッドは、おおよそのメッセージ数とその他のキュー メタデータを返します。

message_count, metadata = azure_queue_service.get_queue_metadata(
  "test-queue")

方法: キューを削除する

キューとそのキューに含まれるすべてのメッセージを削除するには、queue オブジェクトで delete_queue() メソッドを呼び出します。

azure_queue_service.delete_queue("test-queue")

次のステップ

Queue Storage の基本を学習したので、これらのリンクに従って、より複雑なストレージ タスクについて学習します。

この記事で説明する Azure Queue Storage と Service Bus キューの使用方法で説明されている Azure Service Bus キューの比較については、「Azure Queue Storage と Service Bus キューの比較と比較」を参照してください。