4.11. 最後の値キューの設定


last value queueとは、同じラストバリューキーの値を持つ新しいメッセージがキューに入ると、キュー内のメッセージを破棄するタイプのキューです。この動作により、最後の値キューは同じキーの最後の値のみを保持します。

注記

キューに送信されたメッセージがページングされている場合、最終値キューは期待どおりに動作しません。これらのキューに送信されたメッセージがページングされないように、last-value キューを持つアドレスの address-full-policy パラメーターの値を DROPBLOCK、または FAIL に設定します。詳細は、「メッセージドロップの設定」 を参照してください。

last value キューに対する単純なユースケースは、株式の株価しか監視するためのものです。特定の株式の最新値のみが関心があります。

注記

設定した最後の値キーのないメッセージが最後の値キューに送信される場合、ブローカーはこのメッセージを "通常" のメッセージとして処理します。設定された最後の値キーを持つ新しいメッセージが到達すると、このようなメッセージはキューから消去されません。

最後の値キューを個別に、またはアドレスセットに関連付けられたすべてのキューに設定できます。

以下の手順では、以下の方法で最後の値キューを設定する方法を説明します。

4.11.1. 最後の値キューを個別に設定

以下の手順は、最後の値キューを個別に設定する方法を説明します。

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. 指定のキューに、last-value-key キーを追加し、カスタム値を指定します。以下に例を示します。

    <address name="my.address">
        <multicast>
            <queue name="prices1" last-value-key="stock_ticker"/>
        </multicast>
    </address>
  3. また、デフォルトのラストバリューキー名 _AMQ_LVQ_NAME を使用するラストバリューキューを設定することもできます。これを行うには、与えられたキューに last-value のキーを追加します。この値は true に設定します。以下に例を示します。

    <address name="my.address">
        <multicast>
            <queue name="prices1" last-value="true"/>
        </multicast>
    </address>

4.11.2. アドレスの最後の値キューの設定

次の手順では、アドレスまたは一連のアドレスにラストバリューキューを設定します。

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. address-setting 要素に一致するアドレスの場合は、default-last-value-key を追加します。カスタム値を指定します。以下に例を示します。

    <address-setting match="lastValue">
       <default-last-value-key>stock_ticker</default-last-value-key>
    </address-setting>

    上記の設定に基づいて、lastValue アドレスに関連付けられたすべてのキューは、stock_ticker の最後の値キーを使用します。デフォルトでは、default -last-value-key の値は設定されていません。

  3. 一連のアドレスに対してラストバリューキューを設定するには、アドレスのワイルドカードを指定することができます。以下に例を示します。

    <address-setting match="lastValue.*">
       <default-last-value-key>stock_ticker</default-last-value-key>
    </address-setting>
  4. または、アドレスに関連付けられたすべてのキューや一連のアドレスを設定して、デフォルトの最後の値キー名である _AMQ_LVQ_NAME を使用することができます。これを行うには、default-last-value-key の代わりに default-last-value-queue を追加します。この値は true に設定します。以下に例を示します。

    <address-setting match="lastValue">
       <default-last-value-queue>true</default-last-value-queue>
    </address-setting>

関連情報

4.11.3. 最後の値のキュー動作の例

この例では、最後の値キューの動作を示しています。

broker.xml 設定ファイルで、以下のような設定が追加されているとします。

<address name="my.address">
    <multicast>
        <queue name="prices1" last-value-key="stock_ticker"/>
    </multicast>
</address>

上記の設定では、prices1 というキューを作成し、最終値のキーを stock_ticker としています。

ここで、クライアントが 2 つのメッセージを送信するとします。各メッセージには、プロパティー stock_ticker に同じ値 ATN があります。各メッセージには stock_ price というプロパティーに異なる値があります。各メッセージは、同じキュー prices1 に送信されます。

TextMessage message = session.createTextMessage("First message with last value property set");
message.setStringProperty("stock_ticker", "ATN");
message.setStringProperty("stock_price", "36.83");
producer.send(message);
TextMessage message = session.createTextMessage("Second message with last value property set");
message.setStringProperty("stock_ticker", "ATN");
message.setStringProperty("stock_price", "37.02");
producer.send(message);

stock_ticker last value キーと同じ値を持つ 2 つのメッセージ (この場合は ATN) が prices1 queue に到達すると、最新のメッセージのみがキュー内に残り、最初のメッセージがパージされます。コマンドラインで以下の行を入力し、この動作を検証できます。

TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000);
System.out.format("Received message: %s\n", messageReceived.getText());

この例では、両方のメッセージが最後の値キーに同じ値を使用し、2 番目のメッセージがキューに受信されたため、2 つ目のメッセージが表示されます。

4.11.4. 最後の値キューに対して非破壊的な消費を強制する

コンシューマーがキューに接続すると、通常の動作として、そのコンシューマーに送信されたメッセージがコンシューマーによってのみ取得されます。コンシューマーがメッセージの受信を確認すると、ブローカーはキューからメッセージを削除します。

通常の消費動作の代わりに、非破壊的な消費を強制するようにキューを設定できます。この場合、キューがメッセージをコンシューマーに送信すると、他のコンシューマーによってメッセージを受信できます。さらに、コンシューマーが消費した場合でも、メッセージはキューに残ります。このような非破壊的な消費行動を強制する場合、コンシューマーはキューブラウザーと呼ばれます。

非破壊的な消費を実施すると、キューが特定の最後の値キーに関する最新値を保持するようにするため、最後の値キューでは便利な設定になります。

以下の手順は、最後の値キューに対して非破壊的な消費を強制する方法を示しています。

前提条件

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. キューを最後の値キューとして個別に設定している場合は、non-destructive キーを追加します。この値は true に設定します。以下に例を示します。

    <address name="my.address">
       <multicast>
          <queue name="orders1" last-value-key="stock_ticker" non-destructive="true" />
       </multicast>
    </address>
  3. 以前、最後の値キューにアドレスまたは一連のアドレス を設定している場合は、default-non-destructive キーを追加します。この値は true に設定します。以下に例を示します。

    <address-setting match="lastValue">
       <default-last-value-key>stock_ticker </default-last-value-key>
       <default-non-destructive>true</default-non-destructive>
    </address-setting>
    注記

    デフォルトでは、default-non-destructive の値は false です。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.