获取 remote call 变量解决方案

2019-04-26 13:46:01 +08:00
 PoetAndPoem

我这儿很多 bean 获取某个变量入口是通过调用 remote call ;有时候又是通过中间件获取变量的。 这会造成一个问题:因为本地方法相互调用还是 remote call,这样会 return null,而且耗时很长;现在的解决方案是给每个调用的方法都加上这个变量参数,就像 foo(A)改为 foo(A,B). 这样代码看起来很丑陋改起来也比较多,老哥们有碰过这种情况吗请教解决方案?

1739 次点击
所在节点    Java
10 条回复
micean
2019-04-26 14:04:49 +08:00
没看明白……
是指同步改异步吗?
那原来的方法肯定要改的,要么加个 callback 参数,要么返回值改成 Future 之类的
Aidenboss
2019-04-26 14:06:22 +08:00
你可能需要:CompletableFuture 或者 RxJava
zjsxwc
2019-04-26 14:14:39 +08:00
同没看明白…
PoetAndPoem
2019-04-26 14:15:56 +08:00
@micean 不知道怎么修改文章。问题是:变量入口可能是 remote call 或者通过中间件获取的;

但实际代码中,所有 bean 调用这个变量时,如果为 null 都会通过 remote call 进行获取。就可能会发生调用 remote call,return null (因为必须要用到入口处传的 key )。
PoetAndPoem
2019-04-26 14:16:29 +08:00
@zjsxwc 抱歉,没表达清楚,请看回复
micean
2019-04-26 14:21:43 +08:00
意思是 Bean.getX(),这个 X 如果本地有,就直接返回,没有的话就从远程获取
是这个意思么
PoetAndPoem
2019-04-26 14:25:24 +08:00
@micean 是的,但是产品在 X 的获取上会有个坑点, 必须要有 remote 调用入口的 key,如果没有 key,即使 invoke remote 也会 return null, 而且耗时较长
micean
2019-04-26 14:32:24 +08:00
耗时的问题解决不了,毕竟是 io 获取的
要小改的话,直接阻塞调用线程,就是在 getX()加这个 CompletableFuture.supplyAsync(() -> remoteCall()).get()
PoetAndPoem
2019-04-26 14:53:14 +08:00
@micean 即使用异步调用,如果 key 不是在入口中获取,一样得不了值。
micean
2019-04-26 15:08:57 +08:00
idea 有为 bean 创建代理类的功能,使用代理类去操作吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/558932

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX