artemisのBaseInterceptorについて
本文は主にartemisのBaseInterceptorを研究する
BaseInterceptor
activemq-artemis-master/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/BaseInterceptor.java
public interface BaseInterceptor {
/**
* Intercepts a packet which is received before it is sent to the channel
*
* @param packet the packet being received
* @param connection the connection the packet was received on
* @return {@code true} to process the next interceptor and handle the packet,
* {@code false} to abort processing of the packet
* @throws ActiveMQException
*/
boolean intercept(P packet, RemotingConnection connection) throws ActiveMQException;
}
AbstractProtocolManager
activemq-artemis-master/artemis-server/src/main/java/org/apache/activemq/artemis/spi/core/protocol/AbstractProtocolManager.java
public abstract class AbstractProtocolManager, C extends RemotingConnection> implements ProtocolManager {
private final Map prefixes = new HashMap<>();
protected void invokeInterceptors(final List interceptors, final P message, final C connection) {
if (interceptors != null && !interceptors.isEmpty()) {
for (I interceptor : interceptors) {
try {
if (!interceptor.intercept(message, connection)) {
break;
}
} catch (Exception e) {
ActiveMQServerLogger.LOGGER.failedToInvokeAninterceptor(e);
}
}
}
}
@Override
public void setAnycastPrefix(String anycastPrefix) {
for (String prefix : anycastPrefix.split(",")) {
prefixes.put(SimpleString.toSimpleString(prefix), RoutingType.ANYCAST);
}
}
@Override
public void setMulticastPrefix(String multicastPrefix) {
for (String prefix : multicastPrefix.split(",")) {
prefixes.put(SimpleString.toSimpleString(prefix), RoutingType.MULTICAST);
}
}
@Override
public Map getPrefixes() {
return prefixes;
}
}
小結
BaseInterceptorはinterceptメソッドを定義し、trueは次のinterceptorを継続できることを示し、falseはpacketの処理を終了することを示す
doc