java反射调用dubbo接口
需求:项目增加幂等
场景:
1.三个项目:a 、b、c
2.a项目加幂等
3.b项目dubbo调用项目a的时候超时没有获取返回结果,增加重试机制(非立即重试,3min or 5min 后重试)
4.c项目是一个异步的job项目,用来接收mq,异步处理,管理task等。
方案:
1.a项目设置请求流水id,将请求先存入redis缓存,处理完成之后更新redis中的状态,同一个流水id认为是重复提交,不进行业务处理,直接返回redis中的状态
2.b项目捕获调用a项目的超时异常,存入redis队列
3.c项目启动两个task,task1用来获取redis队列里面的信息,落库。task2用来扫库,及重试。
重点:
1.c项目只是异步接口消息没有业务处理逻辑
2.task2重试的时候需要通过dubbo接口调用b来进行重新发起请求,及后续处理。
这里重点分享一下通过反射机制调用dubbo接口(map为请求参数)
String inter = "com.xxx.xxx.xxx.xxx.xxx.xxx";
Class<?> mClass = Class.forName(inter);
Method method = mClass.getMethod("methodNamexxx",new Class[]{String.class});
Object object = method.invoke(mClass.newInstance(),JSON.toJSONString(map));
圈重点:
1.inter需要是serviceImpl实现类,如果是interface的话,会报
Caused by: java.lang.NoSuchMethodException: com.xxx.xxx.xxx.xxx.xxx.<init>()
2.invoke(Object obj,Object... args) 这里的obj需要newInstance()一下,否则会报
java.lang.IllegalArgumentException: object is not an instance of declaring class
调用dubbo接口的写法:(map为请求参数)
String inter = "com.xxx.xxx.xxx.IxxxService";String methodName = "xxxxx";Class<?> mClass = Class.forName(inter);
Map<String,Object> map = new HashMap<>();
AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Object obj = context.getBean(this.getBeanName(inter));
Method method = mClass.getMethod(methodName,new Class[]{Object.class});
Object object = method.invoke(obj,JSON.toJSON(map));
public String getBeanName(String str){String name = str.substring(str.lastIndexOf(".")+2,str.length());name = name.substring(0,1).toLowerCase() + name.substring(1,name.length());return name;}
通过解析inter获取beanName,通过spring获取bean的方式获取对象进行反射调用。
将interface及method配置到数据库中,就能实现不用改动代码进行调用的操作了。
转载于:https://www.cnblogs.com/Smilence1024/p/9685635.html
java反射调用dubbo接口相关推荐
- 利用java反射调用类的的私有方法--转
原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...
- 利用java反射调用类的的私有方法
http://blog.csdn.net/sunyujia/article/details/2501709 今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根 ...
- 【Java】Java反射调用可变参数的方法
文章目录 1.概述 1.概述 因为要Java反射调用可变参数的方法,所以参考了这篇文章:https://www.cnblogs.com/huqingchen/p/5979936.html 但是测试过程 ...
- Java反射系列--Type接口及其子接口
原文网址:Java反射系列--Type接口及其子接口_IT利刃出鞘的博客-CSDN博客 简介 说明 Type 是java反射机制中提供的一个接口,用来表示java中的所有类型的接口.它们包括原始类型. ...
- Java程序调用MATLAB接口
Java程序调用MATLAB接口 文章目录 Java程序调用MATLAB接口 一.注意事项 二.环境安装 三.MATLAB如何生成JAR包 四.MATLAB生成的JAR包如何引入到Java程序中 五. ...
- Java——okhttp3调用API接口
Java--okhttp3调用API接口 官方网站 本篇以java调用有课API接口为例,签名需要以map的key进行字典排序之后进行sha1加密算法后得出.有课API文档地址:https://pos ...
- java如何调用第三方接口
最近在做一个项目,因一些机制问题,需要我用java代码调用第三方接口.因其接口使用的是@RequestBody注入访问对象的,@RequestBody接受收的是一个json格式的字符串,一定是一个字符 ...
- java 反射调用方法_java的反射机制,以及通过反射获取方法,变量等操作
我们应用会用到反射这个知识点,肯定是想要在运行时得到类的信息,根据类的那些信息去做一些特定的操作.那么,首先无疑就是得到类的信息,在JDK中提供了Class对象来保存类的信息.所以,反射的第一步就是得 ...
- Java 编程问题:七、Java 反射类、接口、构造器、方法和字段
原文:Java Coding Problems 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自[ApacheCN Java 译文集],自豪地采用谷歌翻译. 本章包括涉及 Java 反射 ...
最新文章
- 干货 | OpenCV看这篇就够了,9段代码详解图像变换基本操作
- mysql更新一个表里的字段等于另一个表某字段的值
- hdu 1814 字典序最小的2sat(暴力深搜)
- python 对图片进行直方图均衡化处理(批量自动遍历文件夹图片)
- Java集合框架:Collections工具类
- 第13课:动手制作自己的简易聊天机器人
- 分数小数互换图_重复控制器学习心得(二)——超前环节的分数化和校正因子的引入...
- Hash(散列)建表及查找
- Python之路(二)Python基础
- java中elapseTime设置新时间,Java ApplicationLike.getApplicationStartElapsedTime方法代码示例...
- python获取本地时间并向服务器发送udp报文_python3通过udp实现组播数据的发送和接收操作...
- 如何将 Mac 置入睡眠状态或唤醒 Mac?
- 电脑取消撤销快捷键是什么_必须掌握的十个电脑使用技巧
- 如何 gitignore .gitignore
- DEDECMS留言薄全站调用方法
- ubuntu 14.04.1 smbd环境搭建
- 循环的进阶:二重循环
- flink 任务提交问题汇总
- 中介者(Mediator)
- 灵敏度分享码显示服务器不可用,和平精英S11最稳灵敏度分享码有哪些?和平精英灵敏度设置分享码...