公司安全给了一个基础服务前端 api 接口都要走一边安全服务(串行的),需要控制在 100 毫秒内如果安全服务没有响应完就直接跳过它。 本来我的解决方案是每次调用前开始计时去监听这个计时器再调用安全服务如果超过 100 毫秒就跳出。但是这样对 cpu 开销太大各位有什么好点的解决方案吗
1
spLite 2018-08-30 11:02:11 +08:00
如果调用安全服务是前端发起的,跟 java 没直接关系? js 设置 http 请求超时时间 100ms。如果前端调后台,后台执行业务前(拦截器中?)调用安全服务,同理也可以设置超时时间
|
2
wdlth 2018-08-30 11:03:41 +08:00
这类似于服务熔断吧
|
3
biaoliruyi OP @spLite 后端和安全交互
|
4
metrxqin 2018-08-30 11:06:55 +08:00 2
语无伦次,程序员的语文水平这么差吗?平时需求得急死吧?
|
5
biaoliruyi OP @wdlth 性质有点像 触发超时
|
6
biaoliruyi OP @metrxqin 你在这阴阳怪气什么?
|
7
Rush9999 2018-08-30 11:12:32 +08:00
AwaitTermination
|
8
biaoliruyi OP @Rush9999 谢谢
|
9
sagaxu 2018-08-30 11:31:20 +08:00 via Android
计时器是不太占用 cpu 的
|
10
micean 2018-08-30 11:37:18 +08:00
“跳出的 CUP 开销大”如果是指的抛出异常的话,请看 exception 的 4 参构造函数,不搞 track 的话,开销很小的
|
11
DeadLion 2018-08-30 12:27:40 +08:00
为什么一定要串行
按照你这说法完全可以并行吧 业务正常走,安全校验也走着 并发包下面有可用的工具类啊 countdownlaunch 之类的 |
12
CODEWEA 2018-08-30 13:48:53 +08:00 via iPhone
请求设置超时
|
13
ginux 2018-08-30 13:59:39 +08:00
futuretask 了解下
|
14
vjnjc 2018-08-30 14:00:57 +08:00 via Android
是 javaee 调用 HTTP API 么,请求时的 client 可以设 timeout 啊🤓
|
15
yanyuechuixue 2018-08-30 14:17:20 +08:00 via Android
@livid #4
|
16
nullen 2018-08-30 14:27:46 +08:00
触发超时就行了。
|
17
skyleft 2018-08-30 14:57:23 +08:00
future.get(timeout=xxx)
|
18
zhchyu999 2018-08-30 15:05:04 +08:00
根据以往经验,http 接口,并行并不一定有串行快
|
19
biaoliruyi OP 谢谢大伙,我实现测试下 之后把解决方案发出来
|
20
D3EP 2018-08-30 19:34:16 +08:00 via iPhone
你这也太……
|
21
sampeng 2018-08-30 19:52:08 +08:00
需要控制在 100 毫秒内如果安全服务没有响应完就直接跳过它..
请问。。。这个安全服务还有毛线用。。。 |
22
sampeng 2018-08-30 19:55:11 +08:00
刚是皮了一下。。。
Hystrix 了解一下。其实你就是要一个快速失败的能力 |