dubbo

来源:互联网 发布:网络电话回拨软件 编辑:程序博客网 时间:2024/06/03 19:16

测试和生成公用一套zookeeper,怎么保证消费不冲突?

对于Java Web应用,spring的拦截器可以拦截Web接口的调用,而对于dubbo接口,spring的拦截器就不管用了。要实现此功能,需要dubbo提供Filter扩展

dubbo中filter过滤器的使用场景

1 、扩展Filter
实现com.alibaba.dubbo.rpc.Filter接口:

public class AuthorityFilter implements Filter {      private static final Logger LOGGER = LoggerFactory.getLogger(AuthorityFilter.class);      private IpWhiteList ipWhiteList;      //dubbo通过setter方式自动注入      public void setIpWhiteList(IpWhiteList ipWhiteList) {          this.ipWhiteList = ipWhiteList;      }      @Override      public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {          if (!ipWhiteList.isEnabled()) {              LOGGER.debug("白名单禁用");              return invoker.invoke(invocation);          }          String clientIp = RpcContext.getContext().getRemoteHost();          LOGGER.debug("访问ip为{}", clientIp);          List<String> allowedIps = ipWhiteList.getAllowedIps();          if (allowedIps.contains(clientIp)) {              return invoker.invoke(invocation);          } else {              return new RpcResult();          }      }  }  

注意:只能通过setter方式来注入其他的bean,且不需要标注注解。具体请见
http://dubbo.io/developer-guide/%E6%89%A9%E5%B1%95%E7%82%B9%E5%8A%A0%E8%BD%BD.html

2、 配置文件

<dubbo:reference filter="xxx,yyy" /> <!-- 消费方调用过程拦截 --><dubbo:consumer filter="xxx,yyy"/> <!-- 消费方调用过程缺省拦截器,将拦截所有reference --><dubbo:service filter="xxx,yyy" /> <!-- 提供方调用过程拦截 --><dubbo:provider filter="xxx,yyy"/> <!-- 提供方调用过程缺省拦截器,将拦截所有service -->

3 、 扩展实例

  • maven结构
src |-main    |-java        |-com            |-xxx                |-XxxFilter.java (实现Filter接口)    |-resources        |-META-INF            |-dubbo                |-com.alibaba.dubbo.rpc.Filter (纯文本文件,内容为:xxx=com.xxx.XxxFilter)
  • XXXFilter.java
    如前文

  • META-INF/dubbo/com.alibaba.dubbo.rpc.Filter

xxxFilter=com.xxx.AuthorityFilter  
  • dubbo的provider配置文件
<dubbo:provider filter="xxxFilter" />  
原创粉丝点击