0

AzureMessageQueue をトランスポートとして使用して、Azure ワーカー ロールでホストされている NServiceBus エンドポイントがあります。私は、Azure で構成された複数のインスタンスで worker ロールを実行することになると確信しています。順序が重要なメッセージもいくつかあります。

これが私の質問です。このタイプのセットアップ (Azure ワーカー ロールのスケールアウト) で注文を制御する方法はありますか?

サガを見るべきですか?以下で説明する (bus.send(object[] messages) オーバーロードを使用する) ような手法は、このモデルで機能しますが、これは、Azure キューのサイズ制限によりいくつかのメッセージがある場合にのみ理想的です。 .

http://mikaelkoskinen.net/post/NServiceBus-In-order-message-processing.aspx

4

1 に答える 1

0

Bus.Send in batchが役立ち、メッセージが十分に小さい場合はメッセージキューからの読み取りバッチサイズを構成するので、この方法でメッセージの順序を明確に制御できます。バッチ送信では、複数のメッセージインスタンスが同じ物理キューメッセージに配置されますが、バッチ読み取りでは、キューから複数の物理メッセージが一度にプルされ、ノード上で順番に処理されます。

もう1つのオプションは、BLOBのリースを使用して、メッセージハンドラーの読み取りを同期することです。これらを同期に使用する方法については、nsb timeoutmanagerのコードを参照するか、このトピックに関するstevemarxのブログ投稿を参照してください。http://blog.smarx.com/posts/managing-concurrency-in-windows-azure-with-leases

ただし、紺碧のメッセージキューは、それ自体が注文を保証するものではないことに注意してください。これは最善の努力です。トランスポートレベルでの順序を保証する場合は、メッセージの順序を有効にしてAzureServicebusQueuesを使用する必要があります。

よろしく、イヴ

于 2012-11-18T13:27:36.337 に答える