ThingsBoard 提示Too many updates!

ThingsBoard 仪表板配置很多数据的接收时,提示Too many updates!。

一、调查源代码

1.TbWebSocketHandler

发现在[org.thingsboard.server.controller.plugin.TbWebSocketHandler.java]的send方法,是发送给WebSocket数据的。

发送前,判断了是否存在配置perSessionUpdatesConfiguration,如果存在就会做相应的check。

如果满足条件,就会发送了[Too many updates!]的消息给前端(270行)。

@Value("${server.ws.limits.max_updates_per_session:}")
private String perSessionUpdatesConfiguration;

......

SessionMetaData sessionMd = internalSessionMap.get(internalId);
if (sessionMd != null) {
if (!StringUtils.isEmpty(perSessionUpdatesConfiguration)) {
    TbRateLimits rateLimits = perSessionUpdateLimits.computeIfAbsent(sessionRef.getSessionId(), sid -> new TbRateLimits(perSessionUpdatesConfiguration));
    if (!rateLimits.tryConsume()) {
        if (blacklistedSessions.putIfAbsent(externalId, sessionRef) == null) {
            log.info("[{}][{}][{}] Failed to process session update. Max session updates limit reached"
                    , sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), externalId);
            sessionMd.sendMsg("{\"subscriptionId\":" + subscriptionId + ", \"errorCode\":" + ThingsboardErrorCode.TOO_MANY_UPDATES.getErrorCode() + ", \"errorMsg\":\"Too many updates!\"}");
        }
        return;
    } else {
        log.debug("[{}][{}][{}] Session is no longer blacklisted.", sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), externalId);
        blacklistedSessions.remove(externalId);
    }
}
sessionMd.sendMsg(msg);

2.thingsboard.yml

perSessionUpdatesConfiguration的值是配置在thingsboard.yml文件中的。
配置每个会话从服务器发送到客户端的最大消息量。

例如,值“300:1,3000:60”表示每秒更新不超过300次,每分钟更新不超过3000次。

max_updates_per_session: "${TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_UPDATES_PER_SESSION:300:1,3000:60}"

3.官方说明

官方关于更多限制配置量,请参考官方说明

二、解决对策

  1. 修改配置文件中的限制频次或不限制,可能太多增加性能负担。
    thingsboard.yml中max_updates_per_session或者
    环境变量:TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_UPDATES_PER_SESSION
  2. 修改设备发送遥测数据频次。
  3. 修改仪表板显示数据量。
    推测每个数据量配置的Key不同,就会有多次单独的更新通知。
    所以如果每秒更新,显示数量超过50个,会达到每分钟3000次的限制,而出现这个提示。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值