首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
PoetAndPoem
V2EX  ›  Java

获取 remote call 变量解决方案

  •  
  •   PoetAndPoem · 266 天前 · 888 次点击
    这是一个创建于 266 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    10 回复  |  直到 2019-04-26 15:08:57 +08:00
    micean
        1
    micean   266 天前
    没看明白……
    是指同步改异步吗?
    那原来的方法肯定要改的,要么加个 callback 参数,要么返回值改成 Future 之类的
    Aidenboss
        2
    Aidenboss   266 天前
    你可能需要:CompletableFuture 或者 RxJava
    zjsxwc
        3
    zjsxwc   266 天前
    同没看明白…
    PoetAndPoem
        4
    PoetAndPoem   266 天前
    @micean 不知道怎么修改文章。问题是:变量入口可能是 remote call 或者通过中间件获取的;

    但实际代码中,所有 bean 调用这个变量时,如果为 null 都会通过 remote call 进行获取。就可能会发生调用 remote call,return null (因为必须要用到入口处传的 key )。
    PoetAndPoem
        5
    PoetAndPoem   266 天前
    @zjsxwc 抱歉,没表达清楚,请看回复
    micean
        6
    micean   266 天前
    意思是 Bean.getX(),这个 X 如果本地有,就直接返回,没有的话就从远程获取
    是这个意思么
    PoetAndPoem
        7
    PoetAndPoem   266 天前
    @micean 是的,但是产品在 X 的获取上会有个坑点, 必须要有 remote 调用入口的 key,如果没有 key,即使 invoke remote 也会 return null, 而且耗时较长
    micean
        8
    micean   266 天前
    耗时的问题解决不了,毕竟是 io 获取的
    要小改的话,直接阻塞调用线程,就是在 getX()加这个 CompletableFuture.supplyAsync(() -> remoteCall()).get()
    PoetAndPoem
        9
    PoetAndPoem   266 天前
    @micean 即使用异步调用,如果 key 不是在入口中获取,一样得不了值。
    micean
        10
    micean   266 天前
    idea 有为 bean 创建代理类的功能,使用代理类去操作吧
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1020 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 21:33 · PVG 05:33 · LAX 13:33 · JFK 16:33
    ♥ Do have faith in what you're doing.