聊聊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<P> {

/**

* 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<P, I extends BaseInterceptor<P>, C extends RemotingConnection> implements ProtocolManager<I> {

private final Map<SimpleString, RoutingType> prefixes = new HashMap<>();

protected void invokeInterceptors(final List<I> 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<SimpleString, RoutingType> getPrefixes() {

return prefixes;

}

}

  • AbstractProtocolManager的invokeInterceptors方法接收interceptors,之后挨个遍历interceptors,执行interceptor.intercept(message, connection),若返回false则立马终止循环

小结

BaseInterceptor定义了intercept方法,该方法返回true表示可以继续下一个interceptor,返回false表示终止packet的处理

doc

  • BaseInterceptor

以上是 聊聊artemis的BaseInterceptor 的全部内容, 来源链接: utcz.com/z/512648.html

回到顶部