7.5. メッセージインターセプターの使用

AMQ Core Protocol JMS を使用すると、クライアントが出入りするパケットを傍受して、パケットの監査やメッセージのフィルター処理を行うことができます。インターセプターは、傍受するパケットを変更できます。これによりインターセプターは強力になりますが、注意して使用する必要があります。

インターセプターは、boolean 値を返す intercept() メソッドを実装する必要があります。返された値が true の場合、メッセージパケットは処理を継続します。返された値が false の場合、プロセスは中止され、他のインターセプターは呼び出されず、メッセージパケットはそれ以上処理されません。

メッセージインターセプションは、送信パケットがブロッキング送信モードで送信される場合を除き、メインのクライアントコードに対して透過的に行われます。ブロックが有効な状態で送信パケットが送信され、そのパケットが false を返すインターセプターに遭遇した場合、呼び出し元に ActiveMQException がスローされます。スローされた例外にはインターセプターの名前が含まれます。

インターセプターは org.apache.artemis.activemq.api.core.Interceptor インターフェースを実装する必要があります。クライアントインターセプタークラスとその依存関係を適切にインスタンス化および呼び出しするには、クライアントの Java クラスパスに追加する必要があります。

package com.example;

import org.apache.artemis.activemq.api.core.Interceptor;
import org.apache.activemq.artemis.core.protocol.core.Packet;
import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;

public class MyInterceptor implements Interceptor {
    private final int ACCEPTABLE_SIZE = 1024;

    @Override
    boolean intercept(Packet packet, RemotingConnection connection) throws ActiveMQException {
        int size = packet.getPacketSize();
        if (size <= ACCEPTABLE_SIZE) {
            System.out.println("This Packet has an acceptable size.");
            return true;
        }
        return false;
    }
}