Windows Azure EventHubs 事始め

すっかり放置してしまいましたが、MicrosoftからWindows Azure EventHubsがプレビューされています。 Microsoftの一連のIoT戦略の一つであると考えられる本サービスをハンズオン形式で試してみました。

なお、本投稿は以下の記事を実際にやってみた結果のログになります。

Getting started Azure Service Bus EventHubs: building a real-time log stream

EventHubs ?

正式名称がイマイチわかりませんが、引用元のタイトルからわかるようにEventHubsはAzure Service Busに新たに実装されたデータストリームを高スループットで処理するためのサービスです。 現在はプレビューとして公開されており、Azureのサービスポータルからアクセスすることができます。

IoTやデータプロセッシングの分野で利用されることを想定しているようですが、個人的にはIntelligent Systems Servicesからイベントプロセッシングの部分だけをサービス化したようなイメージです。

0. EventHubs用のサービスバスを構築する

では、さっそくEventHubsを利用したサンプルアプリケーションを作っていきましょう。 まずはEventHubsのサービスを作成しておく必要がありますので、Azureのポータルから + new を選択し、 ServiceBus -> イベントハブ -> 簡易作成 をクリックします。

簡易作成の場合はイベントハブ名と地域、名前空間名を指定するだけでイベントハブを開始することができます。 名前空間名はServiceBus名前空間になるので注意してください。

create eventhubs service

作成されるとこんな感じの画面になります。

console of eventhubs

実際にEventHubにアクセスするにはAccess Policyに従ったKeyもしくはConnection Stringを指定する必要があります。今回はデータの送信用・受信用のAccess Policyを作成したうえで、Access Keyを指定してデータの送受信を行うことにします。

ダッシュボードの構成タブからAccess Policyを設定します。今回はデータ送信のパーミッションを持つ LogSender ポリシーと、データ購読用のパーミッションを持つ LogProcessor ポリシーを追加しています。

setup access policy

保存ボタンを押すとポリシー毎のアクセスキーが生成されます。これは後で使うのでメモしておきましょう。

1. Event送信用のアプリケーションを作成する

クライアント側のサンプルとしてアクセスログをEventHubsに送信するWebアプリケーションを作成します。 今回はASP.NET MVC5 Webアプリケーションを使っていくことにしましょう。

まずはテンプレートからMVCアプリケーションを作成します。 面倒なのでアプリケーションのAuthenticationは「なし」に変更しました。

次にEventHubsの関連クラスを扱うためにNugetからライブラリをインストールします。 Microsoft Azure Service Bus Event Hub - EventProcessorHost をNugetパッケージマネージャからインストールしました。

install eventhub library

Traceログを監視してEventを送信するクラスを作成します。

大まかな流れとしてはMessagingFactoryクラスからファクトリを作成し、ファクトリから生成されたクライアントを使ってデータを送信するというシナリオになります。

ソースコードの全文が以下です。

さらに全体を見る場合はGithubにホストしたものを見てください。

上記以外にもJSONシリアライズ用の LogMessageEvent クラスやweb.configの編集などを行っていますが、詳細はGithubのコミットログを参照してください。

最後にControllerクラスで適当にTraceログを出力するようにしたら完成です。

2. 動作確認

実際にアプリケーションを起動してホーム画面を表示してみましょう。 EventHubsのダッシュボードに要求のアクセスが表示されていれば成功です。

access log

これでEventHubsにデータを送信することが確認できました。 次回はEventHubsを購読(subscribe)してデータを受信するアプリケーションを作成してみます。