第3章 新機能と変更点

このセクションでは、AMQ Broker 7.11 の一連の拡張機能と新機能について説明します。

ページングに使用されるディスク容量を制限する
メッセージをページングするように AMQ Broker を設定する場合、受信メッセージのページングに使用されるディスク領域を制限して、ページング操作で過剰なディスク領域が使用されるのを防ぐことができます。詳細については、AMQ Broker の設定特定のアドレスのページング中のディスク使用量の制限 を参照してください。
ページングから読み取られるメッセージに使用されるメモリーを制限する
メッセージをページングするように AMQ Broker を設定すると、クライアントがメッセージを消費する準備ができたときにブローカーがディスクからメモリーに転送するメッセージの保存に使用されるメモリーを制限できます。詳細は、AMQ Broker の設定ページングされたメッセージのメモリーへのフローの制御 を参照してください。
重要

クライアントアプリケーションが、完了通知待ちのメッセージをあまりにも多く残す場合、ブローカーは保留中のメッセージが承認されるまでページングされたメッセージを読み取らないため、ブローカー上でメッセージ枯渇が発生する可能性があります。

たとえば、ページングされたメッセージのメモリーへの転送の制限 (デフォルトでは 20MB) に達すると、ブローカーはそれ以上のメッセージを読み取る前にクライアントからの確認応答を待ちます。同時に、クライアントがブローカーに確認応答を送信する前に十分なメッセージの受信を待機している場合 (クライアントが使用するバッチサイズによって決まります)、ブローカーはメッセージが不足します。

枯渇を回避するには、メモリーへのページングメッセージの転送を制御するブローカーの制限を増やすか、配信メッセージの数を減らします。クライアントがメッセージ確認応答をより早くコミットするか、タイムアウトを使用してブローカーからメッセージを受信しなくなったときに確認応答をコミットするようにすることで、配信メッセージの数を減らすことができます。

配信メッセージの数とサイズは、AMQ 管理コンソールのキューの Delivering Count メトリクスと Delivering Bytes メトリクスで確認できます。

Log4j 2 ログサポート
7.11 以降、AMQ Broker は、JBoss Logging フレームワークの代わりに Log4j 2 ログユーティリティーを使用してメッセージログを提供します。OpenShift Container Platform と RHEL プラットフォームの両方で Log4j 2 ログ設定をカスタマイズできます。
Operator ログレベルの変更
OpenShift Container Platform 上の AMQ Broker 7.11 では、デフォルトのログレベルを変更して、Operator ログに書き込まれる詳細を増減できます。詳細については、Openshift への AMQ Broker のデプロイOperator ログレベルの変更 を参照してください。
Java Authentication and Authorization Service (JAAS) ログインモジュールのサポート
OpenShift Container Platform 上の AMQ Broker 7.11 では、ActiveMQArtemisSecurity CR を使用して AMQ Broker のユーザー認証と承認を設定する代わりに、シークレットで JAAS ログインモジュールを設定できます。JAAS ログインモジュールをシークレットで設定すると、ブローカーを再起動しなくても、プロパティーファイル内のユーザーとロールの情報を更新できます。さらに、CR では設定できない LDAP などのログインモジュールを設定できます。詳細については、OpenShift への AMQ Broker のデプロイシークレットでの JAAS ログインモジュールの設定 を参照してください。
アップグレードの制限
OpenShift Container Platform 上の AMQ Broker 7.11 では、Operator がブローカーコンテナーイメージを利用可能な最新バージョンに自動的にアップグレードします。デプロイメントのカスタムリソース (CR) を設定して、自動アップグレードを禁止したり、特定のバージョンまたは特定のブローカーおよび初期コンテナーイメージへの自動アップグレードのみを許可したりすることができます。
注記

自動アップグレードを制限する場合は、CR で spec.deploymentPlan.image 属性と spec.deploymentPlan.initImage 属性の組み合わせ、または spec.version 属性のいずれかを指定する必要があります (両方を指定することはできません)。

詳細については、OpenShift への AMQ Broker のデプロイ自動アップグレードの制限 を参照してください。

拡張ステータスレポート

OpenShift Container Platform 上の AMQ Broker 7.11 では、メインブローカー CR で Operator によって報告されるステータス情報が拡張されました。

  • CR の内容の有効性。
  • BrokerProperties 属性で設定されたプロパティーのアプリケーション。
  • シークレット内の Java Authentication and Authorization Service (JAAS) ログインモジュールファイルのブローカー Pod への伝播。
  • デプロイされているブローカーのバージョンと、そのバージョンのブローカーおよび初期コンテナーイメージの URL。
  • メジャー、マイナー、パッチ、およびセキュリティーのアップグレードをデプロイメントに適用する機能。
同期ミラーリングのサポート
7.11 以降では、ブローカー間の同期ミラーリングを設定して、ミラー内の両方のブローカーのボリュームにメッセージが同時に書き込まれるようにすることができます。同期ミラーリングを使用すると、ミラーリングされたブローカーが障害復旧のために最新の状態に保たれます。詳細については、AMQ Broker の設定ブローカー接続の設定 を参照してください。
Pod の中断バジェット
OpenShift Container Platform 上の AMQ Broker 7.11 では、Pod 中断バジェットを設定して、メンテナンス期間などの自主的な中断中に同時に使用可能にする必要があるクラスター内の Pod の最小数を指定できます。詳細については、OpenShift への AMQ Broker のデプロイPod 中断バジェットの設定 を参照してください。
brokerProperties 設定は変更可能なシークレットに保存される
OpenShift Container Platform 上の AMQ Broker 7.11 では、CR の brokerProperties 属性を使用して作成された設定は、変更可能なシークレットに保存されます。変更可能なシークレットは、ブローカーを再起動しなくても更新できます。したがって、設定の更新は、特にブローカーの再起動を必要とする更新を除き、ブローカーが設定を定期的にリロードするときに適用されます。
組み込み Web サーバーを制御するための操作
7.11 以降、ActiveMQServerControl JMX MBean の stopEmbeddedWebServerstartEmbeddedWebServer、および restartEmbeddedWebServer オペレーションを使用して、AMQ Broker の組み込み Web サーバーを停止および再起動できます。これらの操作を使用すると、AMQ Broker の SSL 証明書を更新する場合などに、AMQ Broker の再起動を回避できます。
AMQ 管理コンソールへのログインに使用される認証情報はメッセージの送信に使用される

AMQ Broker の以前のバージョンでは、AMQ 管理コンソールでメッセージを送信するには、AMQ 管理コンソールの Preferences ページでユーザー名とパスワードを指定する必要がありました。7.11 以降、メッセージは AMQ 管理コンソールへのログインに使用する認証情報を使用して送信されます。

デフォルトの動作をオーバーライドし、別の認証情報を指定して個別のメッセージを送信できます。詳細については、AMQ Broker の管理アドレスへのメッセージの送信 を参照してください。

OpenShift Container Platform 上の AMQ Broker が Prometheus のメトリックデータを収集するように事前設定される
OpenShift Container Platform 上の AMQ Broker 7.11 では、Prometheus Operator Service Monitor がメトリックデータを収集できるように AMQ Broker コンテナー Pod が事前設定されています。以前のリリースでは、Service Monitor がメトリックデータを収集するために必要なポートを公開する必要がありました。
ブローカーコンテナーの環境変数を設定する
OpenShift Container Platform 上の AMQ Broker 7.11 では、各ブローカーコンテナーに渡されるカスタムリソース (CR) に環境変数を設定できます。たとえば、TZ 環境変数を追加して、ブローカーコンテナーのタイムゾーンを設定できます。詳細については、OpenShift への AMQ Broker のデプロイブローカーコンテナーの環境変数の設定 を参照してください。
OpenShift Container Platform でのプロキシー転送がサポートされる
OpenShift Container Platform 上の AMQ Broker 7.11 では、AMQ 管理コンソールをホスティングする組み込み Web サーバーが、X-Forwarded ヘッダーを処理するように事前設定されています。X-Forwarded ヘッダーを処理することにより、AMQ 管理コンソールは、プロキシーがリクエストのパスに関与している場合に変更または失われるヘッダー情報を受け取ることができます。たとえば、AMQ 管理コンソールは HTTP を使用しますが、プロキシーである OpenShift Container Platform ルーターは、ルーターで終了する HTTPS ルートを使用して AMQ 管理コンソールを公開します。AMQ 管理コンソールは、X-Forwarded ヘッダーから、ブラウザーとルーターの間の接続が HTTPS を使用していることを識別し、ブラウザーのリクエストを処理するために HTTPS に切り替えることができます。
一部の再配信属性が brokerProperties CR 属性でのみサポートされる

7.8.x または 7.9.x デプロイメントの spec.deploymentPlan.addressSettings.addressSetting CR 要素で redeliveryDelayMultiplier または redeliveryCollisionAvoidanceFactor 属性が設定されている場合、7.11.x にアップグレードした後、brokerProperties CR 属性でこれらの属性を設定する必要があります。7.10.0 では両方の属性のデータ型が float から string に変更されたため、これが必要です。その結果、これらの属性は spec.deploymentPlan.addressSettings.addressSetting 属性ではサポートされなくなりました。

次の例は、brokerProperties 要素で両方の属性を設定する方法を示しています。

spec:
  ...
  brokerProperties:
  - "addressSettings.#.redeliveryMultiplier=2.1"
  - "addressSettings.#.redeliveryCollisionAvoidanceFactor=1.2"
  ...
注記

brokerProperties 属性では、spec.deploymentPlan.addressSettings.addressSetting 要素で使用されていた redeliveryDelayMultiplier 属性名の代わりに、redeliveryMultiplier 属性名を使用します。

XML 外部エンティティー (XXE) 処理の無効化
broker.xml ファイルに含まれる個別のファイルでブローカー設定をモジュール化する必要がない場合は、XXE セキュリティーの脆弱性から保護するために XXE 処理を無効にできます。可能な場合は、XXE 処理を無効にすることが推奨されます。詳細については、AMQ Broker の設定外部 XML エンティティー (XXE) 処理の無効化 を参照してください。
JGroups 5.x
7.10.0 より前のバージョンの AMQ Broker では JGroups 3.x が使用されていました。AMQ Broker 7.11 は JGroups 5.x を使用しますが、これには JGroups 3.x との下位互換性がありません。一部のプロトコルとプロトコルプロパティーは 2 つの JGroup バージョン間で変更されているため、AMQ Broker 7.11 にアップグレードするときに JGroups スタック設定の変更が必要になる場合があります。
特定のディレクトリー名に展開された AMQ Broker アーカイブの内容
Red Hat Enterprise Linux で AMQ Broker アーカイブを展開すると、アーカイブの内容が現在のディレクトリーの apache-artemis-2.28.0.redhat-00004 というディレクトリーに展開されます。
Operator チャンネル

AMQ Broker Operator である Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) は、次のチャネルで入手できます。

  • 7.11.x - このチャネルはバージョン 7.11 のみの更新を提供する長期サポート (LTS) チャネルです。
  • 7.10.x - このチャネルはバージョン 7.10 のみの更新を提供する長期サポート (LTS) チャネルです。
注記

チャネルの切り替えにより Operator をアップグレードすることはできません。既存の Operator をアンインストールし、適切なチャネルから Operator の新規バージョンをインストールする必要があります。

選択する Operator を判別するには、Red Hat Enterprise Linux コンテナー互換性マトリクス を参照してください。

Prometheus メトリックプラグインのクラス名を変更します。
AMQ Broker 7.11 では、AMQ Broker に含まれる Prometheus メトリックプラグインのクラス名が org.apache.activemq.artemis.core.server.metrics.plugins.ArtemisPrometheusMetricsPlugin から com.redhat.amq.broker.core.server.metrics.plugins.ArtemisPrometheusMetricsPlugin に変更されました。Prometheus メトリックプラグインが AMQ Broker の以前のバージョンで有効になっている場合は、AMQ Broker 7.11 にアップグレードするときに、broker.xml 設定ファイル内のクラス名を更新する必要があります。詳細については、AMQ Broker の管理ブローカーインスタンスの 7.10.x から 7.11.x へのアップグレード を参照してください。
listProducers API メソッドおよび listProducersInfoAsJSON JMX メソッドによって返されるデータへの変更

AMQ Broker 7.11 では、AMQ 管理コンソールで使用される listProducers メソッドによってデータが返される方法が次のように強化されています。

  • 以前のバージョンで返されたデータでは、プロデューサーはセッションごとに表示されていました。したがって、プロデューサーごとに 2 つのセッションを作成する Core プロトコルを使用してプロデューサーを作成した場合、2 つのセッションごとに別のプロデューサーが表示されます。また、プロデューサーからメッセージを送信せずにプロデューサーを作成した場合、プロデューサーに返されるアドレスは空でした。AMQ Broker 7.11 では、listProducers メソッドは、コアプロトコルによって作成された 2 つのセッションに対して 1 つのプロデューサーを返します。さらに、メッセージを送信する前であっても、アドレス列には正しいアドレスが表示されます。
  • 以前は、匿名プロデューサを使用して Core または AMQP プロトコルを使用して複数のアドレスにメッセージを送信すると、アドレスごとにプロデューサが表示されていました。さらに、表示されたアドレスはプロデューサーがメッセージを送信した最初のアドレスのものであり、単一のキューに送信する通常のプロデューサーのように見えていました。AMQ Broker 7.11 では、匿名プロデューサーを使用して複数のアドレスにメッセージを送信すると、匿名プロデューサーごとに 1 つのプロデューサーが表示されます。さらに、アドレスは特定のアドレスに関連付けられておらず、ANONYMOUS という値を持っています。

以前は、listProducersInfoAsJSON メソッドは、特定のセッションによって各キューに送信されたメッセージの数を提供していました。ただし、このメソッドは、メッセージの送信先となる各キューのプロデューサーを誤って返していました。たとえば、匿名プロデューサーが 1000 個のキューにメッセージを送信した場合、このメソッドは 1000 個のプロデューサーを返していました。AMQ Broker 7.11 では、listProducersInfoAsJSON メソッドは listProducers メソッドとまったく同じデータを返しますが、形式は異なります。

AMQ Broker 7.11 では、次の新しいメトリックデータが返されます。

Consumers

messagesInTransit - まだ確認されていない配信メッセージの数

messagesInTransitSize - まだ確認されていない配信メッセージの合計サイズ

messagesDelivered - 配信されたメッセージの数

messagesDeliveredSize - 配信されたメッセージの合計サイズ

messagesAcknowledged - 確認されたメッセージの総数

messagesAcknowledgedAwaitingCommit - 確認されていても、コミットを待っているトランザクション内のメッセージの総数

lastDeliveredTime - 最後にメッセージが配信された時間 (ミリ秒単位)

lastAcknowledgedTime - 最後にメッセージが確認されてからの時間 (ミリ秒単位)

Producers

msgSent - プロデューサーによって送信されたメッセージの数

msgSizeSent - プロデューサーによって送信されたメッセージの合計サイズ

lastProducedMessageID - 最後に送信されたメッセージの ID