当前位置: 首页 > 知识库问答 >
问题:

增加春兔心跳值

司空叶五
2023-03-14

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

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;

问题是心跳间隔没有改变。我在AMQConnection中快速查看以下内容

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将不尊重客户端的首选项(不能禁用心跳信号,也不能增加心跳信号)。我错过什么了吗?

共有1个答案

萧芷阳
2023-03-14

你是对的。AMQConnection将根据该方法确定心跳值,然后使用TuneOk方法将该值发送到服务器(https://www.rabbitmq.com/amqp-0-9-1-reference.html#connection.tune-好的)。您可以看到,它将negotiatedMaxValue()的结果发送到您看到对该方法调用的位置以下几行:

_channel0.transmit(new AMQP.Connection.TuneOk.Builder()
    .channelMax(channelMax)
    .frameMax(frameMax)
    .heartbeat(heartbeat)
    .build());

根据代码的逻辑,似乎只能减少心跳,但最大心跳将是服务器发送的任何内容,不能再增加了。RabbitMQ文档对于能够增加服务器最初发送的心跳信号的细节有点模糊,但确实说它可以被覆盖:https://www.rabbitmq.com/heartbeats.html

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

检查RabbitMQ GitHub不会显示有关将心跳值设置为大于服务器发送值的任何现有问题。也许在那里提交一个问题,看看开发人员怎么说?https://github.com/rabbitmq/rabbitmq-java-client/issues?utf8=✓

 类似资料:
  • 我们正在使用spring云配置服务器。Spring配置客户端使用Spring控制总线(RabbitMQ)获取更新。 看起来每个配置客户端实例都会创建一个连接到'spring.cloud.bus'交换的队列。 对有多少应用程序实例可以连接到“spring.cloud.bus”交换有任何可伸缩性限制? 我想RabbitMQ可以扩展来处理这个问题。 寻找这方面的指导方针。 许多感谢,

  • 嵌入式设备上,只能运行SRS时,其他的业务系统可能需要知道这个设备的ip等信息,SRS可以以http方式主动汇报给api服务器。 编译 要求编译时支持http-parser,即开启了下面任何一个选项即支持: --with-http-api HTTP接口。 --with-http-server HTTP服务器。 --with-http-callback HTTP回调。 配置 在全局配置以下信息即可以

  • 我正在使用spring-cloud-sleuth为http请求、rabbitMQ消息和sheduled事件的日志添加相关id。添加依赖项后,应用程序的启动时间增加了50%。所有其他配置属性,如spring.sleuth.async.enabled和spring.sleuth.grpc.enabled的默认值为true。如果我想减少我的应用程序启动时间,我需要在我的应用程序属性文件中将所有这些都过期

  • 示例: heartbeat 你可以设置自动的心跳来保持连接不断掉。 rpcx会自动处理心跳(事实上它直接就丢弃了心跳)。 客户端需要启用心跳选项,并且设置心跳间隔: option := client.DefaultOption option.Heartbeat = true option.HeartbeatInterval = time.Second

  • 注意:长连接应用必须加心跳,否则连接可能由于长时间未通讯被路由节点强行断开。 心跳作用主要有两个: 1、客户端定时给服务端发送点数据,防止连接由于长时间没有通讯而被某些节点的防火墙关闭导致连接断开的情况。 2、服务端可以通过心跳来判断客户端是否在线,如果客户端在规定时间内没有发来任何数据,就认为客户端下线。这样可以检测到客户端由于极端情况(断电、断网等)下线的事件。 心跳间隔建议值: 建议客户端发

  • 我无法从位于GitHub中的ConfigBeans(https://github.com/spring-cloud/spring-cloud-netflix/tree/master/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/Eureka)中调用一个属性来更改Eureka服务器的心跳和发现上下文