Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提高春兔的心跳值_Java_Spring Boot_Rabbitmq_Spring Rabbit - Fatal编程技术网

Java 提高春兔的心跳值

Java 提高春兔的心跳值,java,spring-boot,rabbitmq,spring-rabbit,Java,Spring Boot,Rabbitmq,Spring Rabbit,我的设置面临一些问题,我正试图增加心跳间隔以测试可能的修复。 我正在使用 Spring boot 1.3.2.RELEASE Spring rabbit 1.5.3.RELEASE 下面是实例化连接工厂的代码 RabbitConnectionFactoryBean connectionFactoryBean = new RabbitConnectionFactoryBean(); connectionFactoryBean.setUseSSL(useSsl); connectionFactor

我的设置面临一些问题,我正试图增加心跳间隔以测试可能的修复。 我正在使用

Spring boot 1.3.2.RELEASE
Spring rabbit 1.5.3.RELEASE
下面是实例化连接工厂的代码

RabbitConnectionFactoryBean connectionFactoryBean = new RabbitConnectionFactoryBean();
connectionFactoryBean.setUseSSL(useSsl);
connectionFactoryBean.setHost(rabbitHostname);
connectionFactoryBean.setVirtualHost(rabbitVhost);
connectionFactoryBean.setUsername(rabbitUsername);
connectionFactoryBean.setPassword(rabbitPassword);
connectionFactoryBean.setConnectionTimeout(900000);
connectionFactoryBean.setRequestedHeartbeat(900);
connectionFactoryBean.afterPropertiesSet();

CachingConnectionFactory cf = new CachingConnectionFactory(connectionFactoryBean.getObject());
cf.setChannelCacheSize(40);
return cf;
int heartbeat = negotiatedMaxValue(this.requestedHeartbeat,
                                   connTune.getHeartbeat());


private static int negotiatedMaxValue(int clientValue, int serverValue) {
        return (clientValue == 0 || serverValue == 0) ?
            Math.max(clientValue, serverValue) :
            Math.min(clientValue, serverValue);
}
问题是心跳间隔没有改变。我在AMQConnection中快速查看以下内容

RabbitConnectionFactoryBean connectionFactoryBean = new RabbitConnectionFactoryBean();
connectionFactoryBean.setUseSSL(useSsl);
connectionFactoryBean.setHost(rabbitHostname);
connectionFactoryBean.setVirtualHost(rabbitVhost);
connectionFactoryBean.setUsername(rabbitUsername);
connectionFactoryBean.setPassword(rabbitPassword);
connectionFactoryBean.setConnectionTimeout(900000);
connectionFactoryBean.setRequestedHeartbeat(900);
connectionFactoryBean.afterPropertiesSet();

CachingConnectionFactory cf = new CachingConnectionFactory(connectionFactoryBean.getObject());
cf.setChannelCacheSize(40);
return cf;
int heartbeat = negotiatedMaxValue(this.requestedHeartbeat,
                                   connTune.getHeartbeat());


private static int negotiatedMaxValue(int clientValue, int serverValue) {
        return (clientValue == 0 || serverValue == 0) ?
            Math.max(clientValue, serverValue) :
            Math.min(clientValue, serverValue);
}

来自服务器的值是60。方法
negotiatedMaxValue
将不尊重客户端的首选项(不能禁用心跳或增加心跳)。我错过什么了吗

你说得对。AMQConnection将根据该方法确定心跳值,然后使用TuneOk方法将该值发送到服务器()。您可以看到,它将negotiatedMaxValue()的结果发送到您看到对该方法的调用的地方以下几行:

_channel0.transmit(new AMQP.Connection.TuneOk.Builder()
    .channelMax(channelMax)
    .frameMax(frameMax)
    .heartbeat(heartbeat)
    .build());
根据代码的逻辑,您似乎只能减少心跳,但最大心跳将是服务器发送的任何内容,不能再增加了。RabbitMQ文档对于能够增加服务器最初发送的心跳的细节有点含糊不清,但确实说它可以被覆盖:

我查看了最新版本的SpringRabbit,它仍然有相同的配置,所以看起来不会很快改变

检查RabbitMQ GitHub不会显示设置心跳值大于服务器发送值的任何现有问题。也许在那里提交一个问题,看看开发者怎么说