如何在Dubbo拦截器中拿到Invoker的引用对象
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"如何在Dubbo拦截器中拿到Invoker的引用对象",在日常操作中,相信很多人在如何在Dubbo拦截器中拿到Invoker的引用对象问题上存在疑惑,小编查阅了各式资料,整理出简单好
千家信息网最后更新 2026年11月02日如何在Dubbo拦截器中拿到Invoker的引用对象
这篇文章主要介绍"如何在Dubbo拦截器中拿到Invoker的引用对象",在日常操作中,相信很多人在如何在Dubbo拦截器中拿到Invoker的引用对象问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何在Dubbo拦截器中拿到Invoker的引用对象"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
本文基于Dubbo 2.7.8。
当我们自定义Dubbo拦截器的时,有时候想要拿到代理对象(这里的代理对象是指Spring容器中的实际对象,可能已经被Cglib或Jdk代理),这里提供一种简单可行的方案。目前2.7.5及以上版本可用
先来看一下Dubbo服务导出的调用链:
//导出所有服务private void exportServices() { configManager.getServices().forEach(sc -> { // TODO, compatible with ServiceConfig.export() ServiceConfig serviceConfig = (ServiceConfig) sc; serviceConfig.setBootstrap(this); if (exportAsync) { ExecutorService executor = executorRepository.getServiceExporterExecutor(); Future> future = executor.submit(() -> { sc.export(); exportedServices.add(sc); }); asyncExportingFutures.add(future); } else { sc.export(); exportedServices.add(sc); } }); }//单个服务导出public synchronized void export() //是否需要导出 if (!shouldExport()) { return; } checkAndUpdateSubConfigs(); doExport(); exported(); }protected synchronized void doExport() { if (exported) { return; } exported = true; if (StringUtils.isEmpty(path)) { path = interfaceName; } doExportUrls(); }private void doExportUrls() { //这里是重点 ServiceRepository repository = ApplicationModel.getServiceRepository(); ServiceDescriptor serviceDescriptor = repository.registerService(getInterfaceClass()); repository.registerProvider( getUniqueServiceName(), ref, serviceDescriptor, this, serviceMetadata ); }//注册提供者public void registerProvider(String serviceKey, Object serviceInstance, ServiceDescriptor serviceModel, ServiceConfigBase> serviceConfig, ServiceMetadata serviceMetadata) { ProviderModel providerModel = new ProviderModel(serviceKey, serviceInstance, serviceModel, serviceConfig, serviceMetadata);//key为serviceKey providers.putIfAbsent(serviceKey, providerModel); providersWithoutGroup.putIfAbsent(keyWithoutGroup(serviceKey), providerModel); }可以看到在Dubbo服务导出的时候会向ServiceRepository注册服务信息,而我们在Filter中可以通过Invocation的getTargetServiceUniqueName拿到serviceKey。
结果显而易见:
直接通过以下方式就可以拿到代理对象:
ProviderModel providerModel = ApplicationModel.getServiceRepository().lookupExportedService(invocation.getTargetServiceUniqueName());
System.out.println(providerModel.getServiceInstance().getClass());
到此,关于"如何在Dubbo拦截器中拿到Invoker的引用对象"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
对象
拦截器
服务
代理
学习
更多
帮助
可行
实用
显而易见
接下来
信息
单个
可以通过
实际
容器
提供者
文章
方式
方案
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技企业
百单网互联网科技有限公司
深圳九邦互联网科技有限公司
山东特亿宝互联网科技有限公司
互联网中国科技
互联网科技的
青岛互联网科技公司
互联网科技logo
大白互联网科技
互联网 科技服务平台
华中科技有哪些互联网大佬
常德市电业局互联网科技部
乌苏新华互联网科技做什么的
互联网科技圈年度人物
互联网安防科技感
昆明中奇联合互联网科技
广西科技产业互联网是什么
互联网对科技影响
陕西彩京云互联网科技有限公司
青岛互联网科技园
互联网科技企业
科技服务与互联网
以房互联网科技
安徽鑫晟辉互联网科技
上海卓越科技 互联网
重庆威客帮互联网科技
互联网科技包装股份有限公司上市
上海同邻互联网科技有限公司规模
版纳互联网科技选哪家
武汉亿视互联网科技有限公司