第10章 重複メッセージの検出


複製メッセージを自動的に検出し、フィルタリングするようにブローカーを設定できます。つまり、独自の重複検出ロジックを実装する必要はありません。

重複検出がないと、予期しない接続障害が発生した場合、クライアントはブローカーに送信されたメッセージが受信されたかどうかを判断できません。この場合、クライアントはブローカーがメッセージを受信しなかったことを仮定し、再送信します。これにより、メッセージが複製されます。

たとえば、クライアントがブローカーにメッセージを送信するとします。ブローカーまたは接続がブローカーによって受信および処理される に失敗すると、メッセージはそのアドレスに到達しません。失敗により、クライアントはブローカーから応答を受信しません。ブローカーによってメッセージが受信および処理された にブローカーまたは接続が失敗すると、メッセージは正しくルーティングされますが、クライアントは応答を受信しません。

また、トランザクションを使用して成功を判断することは、必ずしも役立つとは限りません。トランザクションコミットの処理中にブローカーまたは接続が失敗する場合、クライアントはメッセージに正常に送信されたかどうかを判断できません。

このような状況では、クライアントが直近のメッセージを再送信して、想定された障害を修正します。その結果、システムに悪影響を及ぼす重複メッセージが表示される可能性があります。たとえば、注文可能なシステムでブローカーを使用している場合、重複メッセージは、発注書が 2 回処理されることを意味します。

以下の手順では、このような状況から保護するように重複メッセージ検出を設定する方法を説明します。

10.1. 重複 ID キャッシュの設定

ブローカーが重複メッセージを検出できるようにするには、プロデューサーは各メッセージの送信時にメッセージプロパティー _AMQ_DUPL_ID に一意の値を提供する必要があります。ブローカーは、_AMQ_DUPL_ID プロパティーの受信値のキャッシュを維持します。ブローカーがアドレスで新しいメッセージを受信すると、そのアドレスのキャッシュをチェックし、このプロパティーに同じ値でメッセージが処理されていないことを確認します。

各アドレスには独自のキャッシュがあります。各キャッシュのサイズは円形で固定されます。つまり、新しいエントリーはキャッシュ領域の要求に合わせて最も古いエントリーを置き換えます。

以下の手順では、ブローカーの各アドレスによって使用される ID キャッシュをグローバルに設定する方法を説明します。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. core 要素内に id-cache-size プロパティーおよび persist-id-cache プロパティーを追加し、値を指定します。以下に例を示します。

    <configuration>
      <core>
        ...
        <id-cache-size>5000</id-cache-size>
        <persist-id-cache>false</persist-id-cache>
      </core>
    </configuration>
    id-cache-size

    キャッシュ内の個別のエントリー数として指定される ID キャッシュの最大サイズ。デフォルト値は 20,000 エントリーです。この例では、キャッシュサイズは 5,000 エントリーに設定されます。

    注記

    キャッシュの最大サイズに達すると、ブローカーが重複メッセージの処理を開始できます。たとえば、キャッシュのサイズを 3000 に設定するとします。以前のメッセージが、_AMQ_DUPL_ID が同じ値を持つ新しいメッセージの到着前に 3,000 を 超える メッセージを受信すると、ブローカーは重複を検出できません。これにより、両方のメッセージがブローカーによって処理されます。

    persist-id-cache
    このプロパティーの値を true に設定すると、ブローカーは ID の受信時にディスクに永続化します。デフォルト値は true です。上記の例では、値を false に設定して永続性を無効にします。

関連情報

  • AMQ Core Protocol JMS クライアントを使用して重複 ID メッセージプロパティーを設定する方法は、AMQ Core Protocol JMS クライアントドキュメントの 重複メッセージの検出の使用 を参照してください。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.