前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊artemis的BaseInterceptor

聊聊artemis的BaseInterceptor

原创
作者头像
code4it
修改2020-01-13 11:16:29
6270
修改2020-01-13 11:16:29
举报

本文主要研究一下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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BaseInterceptor
  • AbstractProtocolManager
  • 小结
  • doc
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档