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

Java 如果用最优方式判断是否超出 100 毫秒

  •  
  •   biaoliruyi · 2018-08-30 10:51:03 +08:00 · 4800 次点击
    这是一个创建于 2037 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司安全给了一个基础服务前端 api 接口都要走一边安全服务(串行的),需要控制在 100 毫秒内如果安全服务没有响应完就直接跳过它。 本来我的解决方案是每次调用前开始计时去监听这个计时器再调用安全服务如果超过 100 毫秒就跳出。但是这样对 cpu 开销太大各位有什么好点的解决方案吗

    22 条回复    2018-08-30 19:55:11 +08:00
    spLite
        1
    spLite  
       2018-08-30 11:02:11 +08:00
    如果调用安全服务是前端发起的,跟 java 没直接关系? js 设置 http 请求超时时间 100ms。如果前端调后台,后台执行业务前(拦截器中?)调用安全服务,同理也可以设置超时时间
    wdlth
        2
    wdlth  
       2018-08-30 11:03:41 +08:00
    这类似于服务熔断吧
    biaoliruyi
        3
    biaoliruyi  
    OP
       2018-08-30 11:06:21 +08:00
    @spLite 后端和安全交互
    metrxqin
        4
    metrxqin  
       2018-08-30 11:06:55 +08:00   ❤️ 2
    语无伦次,程序员的语文水平这么差吗?平时需求得急死吧?
    biaoliruyi
        5
    biaoliruyi  
    OP
       2018-08-30 11:07:33 +08:00
    @wdlth 性质有点像 触发超时
    biaoliruyi
        6
    biaoliruyi  
    OP
       2018-08-30 11:09:15 +08:00
    @metrxqin 你在这阴阳怪气什么?
    Rush9999
        7
    Rush9999  
       2018-08-30 11:12:32 +08:00
    AwaitTermination
    biaoliruyi
        8
    biaoliruyi  
    OP
       2018-08-30 11:29:36 +08:00
    @Rush9999 谢谢
    sagaxu
        9
    sagaxu  
       2018-08-30 11:31:20 +08:00 via Android
    计时器是不太占用 cpu 的
    micean
        10
    micean  
       2018-08-30 11:37:18 +08:00
    “跳出的 CUP 开销大”如果是指的抛出异常的话,请看 exception 的 4 参构造函数,不搞 track 的话,开销很小的
    DeadLion
        11
    DeadLion  
       2018-08-30 12:27:40 +08:00
    为什么一定要串行
    按照你这说法完全可以并行吧
    业务正常走,安全校验也走着
    并发包下面有可用的工具类啊 countdownlaunch 之类的
    CODEWEA
        12
    CODEWEA  
       2018-08-30 13:48:53 +08:00 via iPhone
    请求设置超时
    ginux
        13
    ginux  
       2018-08-30 13:59:39 +08:00
    futuretask 了解下
    vjnjc
        14
    vjnjc  
       2018-08-30 14:00:57 +08:00 via Android
    是 javaee 调用 HTTP API 么,请求时的 client 可以设 timeout 啊🤓
    yanyuechuixue
        15
    yanyuechuixue  
       2018-08-30 14:17:20 +08:00 via Android
    @livid #4
    nullen
        16
    nullen  
       2018-08-30 14:27:46 +08:00
    触发超时就行了。
    skyleft
        17
    skyleft  
       2018-08-30 14:57:23 +08:00
    future.get(timeout=xxx)
    zhchyu999
        18
    zhchyu999  
       2018-08-30 15:05:04 +08:00
    根据以往经验,http 接口,并行并不一定有串行快
    biaoliruyi
        19
    biaoliruyi  
    OP
       2018-08-30 15:50:41 +08:00
    谢谢大伙,我实现测试下 之后把解决方案发出来
    D3EP
        20
    D3EP  
       2018-08-30 19:34:16 +08:00 via iPhone
    你这也太……
    sampeng
        21
    sampeng  
       2018-08-30 19:52:08 +08:00
    需要控制在 100 毫秒内如果安全服务没有响应完就直接跳过它..
    请问。。。这个安全服务还有毛线用。。。
    sampeng
        22
    sampeng  
       2018-08-30 19:55:11 +08:00
    刚是皮了一下。。。
    Hystrix 了解一下。其实你就是要一个快速失败的能力
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5331 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:25 · PVG 17:25 · LAX 02:25 · JFK 05:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.