サービスバスのパーティション分割とAMQP1.0利用時の注意事項

2013年12月17日 | By TatsuakiSakai | Filed in: Micosoft Azure.

ご無沙汰しております。

12月より株式会社ランドコンピュータの一員として再スタートいたしました。

さて、リフレッシュの間に私の「持ちネタ」でもあるサービス バスのメッセージングにてパーティション分割を利用できるようになりました。

これまでは、キューおよびトピックを利用する際には単一のメッセージストアがすべてのメッセージを処理していたのですが、扱うメッセージ量が増大するにつれ、送達遅延などが懸念されるようになりました。

そこで、適宜メッセージストアを分割して配信できる機能が「パーティション分割」となります。
パーティション分割には、大別して以下の方法があります。

 

・パーティションキーを利用する方法
メッセージにパーティションキーが指定されている場合、サービス バスはパーティションキー単位でパーティション分割を実施します。
パーティションキーを用いる場合は、単発のメッセージを主に扱う場合に向いています。
・セッションIDを利用する方法
メッセージにセッションIDが指定されている場合、サービスバスはセッションID単位でパーティション分割を実施します。
セッションIDを用いる場合は、複数のメッセージを1つのセッションとして扱う場合です。この場合は、一連のセッションがすべて同じメッセージストアで取り扱われます。
・メッセージIDを利用する方法
キューまたはトピックで重複データ検出が有効化され、パーティションキーおよびセッションIDが指定されていない場合、サービスバスはメッセージIDごとにパーティション分割を実施します。

 

これらの分割についてはすでに情報が出ていますので、割愛します。
ただしここで注意しなければならないのは、パーティション分割を有効にしたキューおよびトピックでは(現時点では)AMQP 1.0対応のメッセージングが利用できない点です。

そのため、接続文字列に「TransportType=Amqp」が指定されていると、「Partitioned Entity is not supported over AMQP」というメッセージが付加されたNotSupportedExceptionがスローされます。

したがって、AMQPによるトランスポートを想定しているキューではパーティション分割を有効化せずに作成しておくことをお勧めします。

余談ですが、普段「TCPが通らないのでキューが使えない!!」という方は、以下のコードを1行「おまじない」として追加しておくとよいでしょう。

 

ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Http;

 

これにより、HTTPSでメッセージを送受信することができます。
当然ですが、AMQP1.0では有効になりませんので悪しからず。

 

 


Comments are closed here.