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不会显示设置心跳值大于服务器发送值的任何现有问题。也许在那里提交一个问题,看看开发者怎么说