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;
}
}