我这儿很多 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 emote 也会 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 创建代理类的功能,使用代理类去操作吧 |