3.5. パケットをインターセプトしてメッセージの監査
ブローカーの出入力または終了パケットをインターセプトして、パケットの監査またはメッセージのフィルターを行います。インターセプターは、インターセプトするパケットを変更します。これによりインターセプターは強力になりますが、危険にさらされる可能性もあります。
ビジネス要件を満たすためのインターセプターを開発します。インターセプターはプロトコル固有であるため、適切なインターフェイスを実装する必要があります。
インターセプターは、ブール値を返す intercept()
メソッドを実装する必要があります。値が true
の場合、メッセージパケットは続行されます。false
の場合、プロセスは中止され、他のインターセプターは呼び出されず、メッセージパケットはこれ以上処理されません。
3.5.1. インターセプターの作成 リンクのコピーリンクがクリップボードにコピーされました!
インターセプターは、傍受するパケットを変更できます。独自の受信インターセプターおよび発信インターセプターを作成できます。すべてのインターセプターはプロトコル固有で、サーバーに出入りするパケットに対して呼び出されます。これにより、監査パケットなどのビジネス要件を満たすインターセプターを作成できます。
インターセプターとその依存関係は、ブローカーの Java クラスに配置する必要があります。<broker_instance_dir>/lib
ディレクトリーは、デフォルトでクラスパスの一部となっているため、使用することができます。
以下の例は、渡された各パケットのサイズをチェックするインターセプターを作成する方法を示しています。
この例では、プロトコルごとに特定のインターフェイスを実装します。
手順
適切なインターフェイスを実装し、その
intercept()
メソッドをオーバーライドします。AMQP プロトコルを使用している場合は、
org.apache.activemq.artemis.protocol.amqp.broker.AmqpInterceptor
インターフェイスを実装してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Core Protocol を使用している場合、インターセプターは、
org.apache.artemis.activemq.api.core.Interceptor
インターフェイスを実装する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow MQTT プロトコルを使用している場合は、
org.apache.activemq.artemis.core.protocol.mqtt.MQTTInterceptor
インターフェイスを実装してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow STOMP プロトコルを使用している場合は、
org.apache.activemq.artemis.core.protocol.stomp.StompFrameInterceptor
インターフェイスを実装してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5.2. インターセプターを使用するためのブローカーの設定 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
-
インターセプタークラスを作成し、そのクラス (およびその依存関係) をブローカーの Java クラスパスに追加します。
<broker_instance_dir>/lib
ディレクトリーは、デフォルトでクラスパスに含まれているため、使用することができます。
手順
-
<broker_instance_dir>/etc/broker.xml
を開きます。 ブローカーがインターセプターを使用するように設定するには、
<broker_instance_dir>/etc/broker.xml
に設定を追加します。インターセプターが着信メッセージを対象としている場合は、その
class-name
をremoting-incoming-interceptors
のリストに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow インターセプターが発信メッセージを対象としている場合は、その
class-name
をremoting-outgoing-interceptors
のリストに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5.3. クライアントサイドのインターセプター リンクのコピーリンクがクリップボードにコピーされました!
クライアントはインターセプターを使用して、クライアントからサーバーに送信したパケットを、またはサーバーがクライアントへインターセプトできます。ブローカー側のインターセプターが false
の値を返す場合、他のインターセプターは呼び出されず、クライアントは追加のパケットを処理しません。このプロセスは、発信パケットが blocking
方式で送信されない限り、透過的に行われます。この場合、呼び出し元に ActiveMQException
が出力されます。出力された ActiveMQException
には、false
値を返したインターセプターの名前が含まれています。
サーバーでは、クライアントインターセプタークラスとその依存関係を適切にインスタンス化および呼び出すには、クライアントの Java クラスに追加する必要があります。