Dubbo相关Filter分析

匿名 (未验证) 提交于 2019-12-02 23:38:02

关于Dubbo的Filter 具体如何组装参考如下:

 public class ProtocolFilterWrapper implements Protocol {     private final Protocol protocol;      public ProtocolFilterWrapper(Protocol protocol) {         if (protocol == null) {             throw new IllegalArgumentException("protocol == null");         } else {             this.protocol = protocol;         }     }      private static <T> Invoker<T> buildInvokerChain(final Invoker<T> invoker, String key, String group) {         final Invoker<T> last = invoker;         List<Filter> filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group);         if (filters.size() > 0) {             for(int i = filters.size() - 1; i >= 0; --i) {                 final Filter filter = (Filter)filters.get(i);                 last = new Invoker<T>() {                     public Class<T> getInterface() {                         return invoker.getInterface();                     }                      public URL getUrl() {                         return invoker.getUrl();                     }                      public boolean isAvailable() {                         return invoker.isAvailable();                     }                      public Result invoke(Invocation invocation) throws RpcException {                         return filter.invoke(last, invocation);                     }                      public void destroy() {                         invoker.destroy();                     }                      public String toString() {                         return invoker.toString();                     }                 };             }         }          return last;     }      public int getDefaultPort() {         return this.protocol.getDefaultPort();     }  	//服务端暴露     public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException {         return "registry".equals(invoker.getUrl().getProtocol()) ? this.protocol.export(invoker) : this.protocol.export(buildInvokerChain(invoker, "service.filter", "provider"));     }  	//客户端引用     public <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException {         return "registry".equals(url.getProtocol()) ? this.protocol.refer(type, url) : buildInvokerChain(this.protocol.refer(type, url), "reference.filter", "consumer");     }      public void destroy() {         this.protocol.destroy();     } }

文章来源: https://blog.csdn.net/lxz521lxz/article/details/90770254
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!