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

获取 remote call 变量解决方案

  •  
  •   PoetAndPoem · 2019-04-26 13:46:01 +08:00 · 1885 次点击
    这是一个创建于 2031 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    但实际代码中,所有 bean 调用这个变量时,如果为 null 都会通过 remote call 进行获取。就可能会发生调用 remote call,return null (因为必须要用到入口处传的 key )。
    PoetAndPoem
        5
    PoetAndPoem  
    OP
       2019-04-26 14:16:29 +08:00
    @zjsxwc 抱歉,没表达清楚,请看回复
    micean
        6
    micean  
       2019-04-26 14:21:43 +08:00
    意思是 Bean.getX(),这个 X 如果本地有,就直接返回,没有的话就从远程获取
    是这个意思么
    PoetAndPoem
        7
    PoetAndPoem  
    OP
       2019-04-26 14:25:24 +08:00
    @micean 是的,但是产品在 X 的获取上会有个坑点, 必须要有 remote 调用入口的 key,如果没有 key,即使 invoke remote 也会 return null, 而且耗时较长
    micean
        8
    micean  
       2019-04-26 14:32:24 +08:00
    耗时的问题解决不了,毕竟是 io 获取的
    要小改的话,直接阻塞调用线程,就是在 getX()加这个 CompletableFuture.supplyAsync(() -> remoteCall()).get()
    PoetAndPoem
        9
    PoetAndPoem  
    OP
       2019-04-26 14:53:14 +08:00
    @micean 即使用异步调用,如果 key 不是在入口中获取,一样得不了值。
    micean
        10
    micean  
       2019-04-26 15:08:57 +08:00
    idea 有为 bean 创建代理类的功能,使用代理类去操作吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2746 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 14:57 · PVG 22:57 · LAX 06:57 · JFK 09:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.