如何在Dubbo拦截器中拿到Invoker的引用对象
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍"如何在Dubbo拦截器中拿到Invoker的引用对象",在日常操作中,相信很多人在如何在Dubbo拦截器中拿到Invoker的引用对象问题上存在疑惑,小编查阅了各式资料,整理出简单好
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
网络安全与文明心得
最新的无线网络技术是什么
服务器遭劫持
公安系统网络安全特召考试
软件开发合同增值税税率
5nm服务器cpu
数据库dbwr
绍兴java软件开发系统
手游怪物数据库在哪个文件
台湾剑灵服务器
数据库检查服务器
软件开发所遇问题及解决方法
asp数据库操作类
方舟生存进化一登录服务器就崩溃
t300 服务器
网络安全工程师技术水平
警察能否通过数据库找失踪人口
二调数据库检查规则
大阪 赴日软件开发
网赌判刑 软件开发
福路通 无网络技术有限公司
餐饮软件开发外包
软件开发人员任务分配表
简述工业网络技术的发展方向
哈理工图书馆数据库
linux 查找数据库
xp服务器怎么进入
app显示服务器超时怎么办
郑州云起网络技术有限公司
博雅数据库湖南高考2018