artemisのBaseInterceptorについて

2846 ワード

シーケンス
本文は主に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; }

  • BaseInterceptorはinterceptメソッドを定義し、trueは次のinterceptorを継続できることを示し、falseはpacketを終了する処理
  • を示す.
    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; } }

  • AbstractProtocolManagerのinvokeInterceptorsメソッドはinterceptorsを受信し、その後interceptorsを1つずつ巡回してinterceptorを実行する.intercept(message,connection)はfalseに戻るとすぐにループ
  • を終了する.
    小結
    BaseInterceptorはinterceptメソッドを定義し、trueは次のinterceptorを継続できることを示し、falseはpacketの処理を終了することを示す
    doc
  • BaseInterceptor