我这儿很多 bean 获取某个变量入口是通过调用 remote call ;有时候又是通过中间件获取变量的。 这会造成一个问题:因为本地方法相互调用还是 remote call,这样会 return null,而且耗时很长;现在的解决方案是给每个调用的方法都加上这个变量参数,就像 foo(A)改为 foo(A,B). 这样代码看起来很丑陋改起来也比较多,老哥们有碰过这种情况吗请教解决方案?
1
micean 2019-04-26 14:04:49 +08:00
没看明白……
是指同步改异步吗? 那原来的方法肯定要改的,要么加个 callback 参数,要么返回值改成 Future 之类的 |
2
Aidenboss 2019-04-26 14:06:22 +08:00
你可能需要:CompletableFuture 或者 RxJava
|
3
zjsxwc 2019-04-26 14:14:39 +08:00
同没看明白…
|
4
PoetAndPoem OP @micean 不知道怎么修改文章。问题是:变量入口可能是 remote call 或者通过中间件获取的;
但实际代码中,所有 bean 调用这个变量时,如果为 null 都会通过 remote call 进行获取。就可能会发生调用 remote call,return null (因为必须要用到入口处传的 key )。 |
5
PoetAndPoem OP @zjsxwc 抱歉,没表达清楚,请看回复
|
6
micean 2019-04-26 14:21:43 +08:00
意思是 Bean.getX(),这个 X 如果本地有,就直接返回,没有的话就从远程获取
是这个意思么 |
7
PoetAndPoem OP @micean 是的,但是产品在 X 的获取上会有个坑点, 必须要有 remote 调用入口的 key,如果没有 key,即使 invoke remote 也会 return null, 而且耗时较长
|
8
micean 2019-04-26 14:32:24 +08:00
耗时的问题解决不了,毕竟是 io 获取的
要小改的话,直接阻塞调用线程,就是在 getX()加这个 CompletableFuture.supplyAsync(() -> remoteCall()).get() |
9
PoetAndPoem OP @micean 即使用异步调用,如果 key 不是在入口中获取,一样得不了值。
|
10
micean 2019-04-26 15:08:57 +08:00
idea 有为 bean 创建代理类的功能,使用代理类去操作吧
|