2009-07-28 2 views
3

最近presentation私はRabbitMQに関して見て、メッセージ重複排除のための「冪等分障壁」と呼ばれるものの使用を述べました。これはメッセージ競合相手の名前ですか、より具体的なものですか?もしそうなら、それは正確に何ですか? Google検索では、RabbitMQにほとんど関連する結果が得られました。その説明はほとんどありませんでした。メッセージのための等価障壁

Idempotency

答えて

9

は、関数の出力に関数を実行する関数の挙動であるn回に一度実行される機能と同様の状態となります。これは、遅延メッセージが予期しない動作を引き起こさないため、メッセージング環境で役立ちます。混同がメッセージを重複を防止するために濃縮されることを意味するが、冪等は、メッセージの複数のコピーの実行が一つのメッセージの実行と同じ結果を有していることを維持しながら、メッセージングフレームワークは、複数の送信及び重複したメッセージの実行を可能にすることを意味します。

+0

私が正しく理解している場合、あなたの最後の文は冪等ではなく、フレームワークよりも、実際にはメッセージコンシューマの関数であることを暗示しているようです。そうであれば、フレームワークが免責されることはどういう意味ですか?フレームワークが重複を実行できるようにすると、重複を検出してそれらを無視するか、影響を受けないままにすることがクライアントに任されます。 – omerkudat

+1

メッセージング環境では、次のいずれかの方法で冪等の動作を作成できます。メッセージにカプセル化したり、末尾の再帰を考えることができます。あるいは、クライアントが説明したようにいくつかのキャッシュメカニズムを実装するようにすることもできます。あなたが考えているキャッシングテクニックは、概念的には単純なテクニックですが、メッセージコンシューマを稼働させたままキャッシュを継続的に拡張する必要があるため、拡張性はありません。これにより、サービスのスループットが高い場合にメモリ不足状態になる可能性があります。 – codethulhu

+0

遅延メッセージのSLAがわかっている場合は、スライディングウィンドウ(TCPと同様)を実装できます。つまり、SLAを作成して、最後の1000個のメッセージだけをキャッシュに保持する必要がある場合は、境界のあるメモリがあります。このタイプのアレンジでは、遅延の現実的な上限があるため、ほとんどの状況で十分です。しかし、これが必要な場合は、「無限」の遅延を許容しません。結論は、あなたのSLAを把握する。 –

関連する問題