Windows Azure EventHubs 事始め その2

前回ではEventHubsにアクセスログを渡すアプリケーションを作成しました。

今回はEventHubsに渡されたイベントを購読して利用するサンプルアプリケーションを作成します。

実際のソースコード

Githubに置きました。 今回の範囲はこのpull requestを参照してください。

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

今回はEventHubSample.Consoleというアプリケーションを作成し、EventHubsに渡されたアクセスログをそのまま表示するようにしました。といっても、やることは前回と殆ど変わりません。MessagingFactoryクラスからクライアントのインスタンスを作成してメッセージの受信を行います。

送信側との相違点は以下の2点です。

  • Consumer Groupを指定する必要がある
  • Receiverインスタンスを作成してReceiveする

Consumer Groupを指定する

EventHubsは渡されたイベントは指定されたプログラムに従ってそれぞれのConsumer Group(購読者)から購読されます。

EventHubsから配信されるイベントを利用したい場合は、「どのConsumer Groupで購読されているデータを利用したいのか」を指定する必要があります。テレビでいうところのチャンネルみたいなものですね。

今回はとくにConsumer Groupによる制御は行っていないので、普通にデフォルトのConsumer Groupを指定するようにしています。

var group = client.GetDefaultConsumerGroup();

Receiverインスタンスを作成してReceiveする

Consumer GroupからReceiverのインスタンスを作成してデータの受信をします。EventHubsは受信したデータをパーティションキーに従ってそれぞれのパーティションに振り分けて保存していますので、それぞれのパーティション毎にReceiverインスタンスを作成してデータを待ち受けています。

このへんはもうちょっと簡単になりそうな気もしますが、どうなんでしょうね…。ConsumerGroup単位で制御できるとかだといいのですが。

// startTimeを過ぎてからデータの受信を待ち受け始める
var receiver = group.CreateReceiver(partitionName, startTime);
// Receiver#Receive の引数を指定することでクライアントが一度に受信可能なイベントデータの数を制御できます
var message = receiver.Receive(10);

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

2. 動作確認

実際にアプリケーションを起動してみましょう。前回作ったWebページのIndexにアクセスしたタイミングでコンソールにログが出てくれば成功です。

f:id:weathercook:20140930130833p:plain

次回はKINECTやNode.jsなどを使って動態情報を送受信するアプリケーションを作成します。