gRPC简单平方根接口设置任意deadline均报DEADLINE_EXCEEDED错误
问题核心原因
gRPC for Node.js(@grpc/grpc-js库)的deadline参数要求传入未来的绝对毫秒级Unix时间戳,不是相对超时时长,也不是秒级时间戳。
你当前传入的10000000000换算为实际时间是1970年4月26日,远早于当前时间,相当于请求发起时deadline已经过期,所以无论你把这个数值调到多大,只要小于当前时间的毫秒级时间戳,都会直接触发DEADLINE_EXCEEDED错误。只有传入Infinity时,gRPC会跳过超时检查,所以能正常调用。
正确设置方法
如果需要设置相对超时,用当前时间戳加上你需要的超时时长(单位毫秒)即可,比如设置10秒超时的写法如下:
client.SqaureRoot({ number: 1 }, { deadline: Date.now() + 10 * 1000 }, function (err, response) { console.log(err, response); });
如果需要设置更长的超时,比如1小时,修改为Date.now() + 60 * 60 * 1000即可。
另外你代码中的方法名SqaureRoot存在拼写错误(正确拼写应为SquareRoot),虽然这个错误不影响本次超时问题的触发,但后续如果修改proto或者方法名时要注意保持一致,避免出现UNIMPLEMENTED错误。
内容的提问来源于stack exchange,提问作者Sathish
相关产品推荐
相关产品推荐

