ご無沙汰しております。
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.