nats request 首次请求响应慢

空白码生 发布于 10/21 20:23
阅读 166
收藏 0

java端(c端)使用nats消息订阅模式访问另一个java应用(s端),publish模式的消息请求能够及时到达s端,然而request模式的消息请求却不行了,首次访问需要等待五分钟左右,在s端看到消息日志并处理,诡异的是,首次访问成功后,后面的request消息请求都能够及时得到响应处理,这是为什么呢?不懂,是哪个环节出问题了?求大神解答,下面贴出request请求接口,求求求求。。。。

/**
 * 伪rpc调用(假设200毫秒内可以得到响应)
 * @param bytes
 * @return
 */
public static BinaryMsg getService(byte[] bytes, String recKey){
    try {
        long start = NetUtil.getCurrentMills();
        Message message = nc.request(buildNatskey(SYNC_SUBJECT, recKey), bytes, 200L,
                TimeUnit.MILLISECONDS);
        long end = NetUtil.getCurrentMills();

        if(LogKey.s2sLogger.isDebugEnabled()){
            LogKey.s2sLogger.debug("get service use time:{}", end - start);
        }
        if (null != message) {
            BinaryMsg msg = new BinaryMsg();
            msg.decode(message.getData());
            return msg;
        } else {
            return null;
        }
    } catch (Exception e) {
        LogKey.s2sLogger.error("getService error:", e);
        return null;
    }
}

以下是问题补充:

@空白码生:问题找到了,是云服务商提供的虚拟机都是无头服务器,在生成随机数的时候由于随机熵池不够导致,发起http请求时会一直停顿在那里,java在发起http请求是获取随机种子时需要用到这个熵池产生的随机种子,jnats使用的http方式通讯,类似的还有httpclient也会有此问题,解决方式就是java启动参数里加上-Djava.security.egd=file:/dev/./urandom (11/09 14:23)
加载中
0
空白码生
空白码生

java启动参数里加上-Djava.security.egd=file:/dev/./urandom

返回顶部
顶部