Fix Telemetry subscription service.
This commit is contained in:
parent
766a56fa9e
commit
4d6ee559fd
@ -35,18 +35,7 @@ import org.thingsboard.server.common.data.id.EntityId;
|
||||
import org.thingsboard.server.common.data.id.EntityIdFactory;
|
||||
import org.thingsboard.server.common.data.id.EntityViewId;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
|
||||
import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;
|
||||
import org.thingsboard.server.common.data.kv.BaseReadTsKvQuery;
|
||||
import org.thingsboard.server.common.data.kv.BasicTsKvEntry;
|
||||
import org.thingsboard.server.common.data.kv.BooleanDataEntry;
|
||||
import org.thingsboard.server.common.data.kv.DataType;
|
||||
import org.thingsboard.server.common.data.kv.DoubleDataEntry;
|
||||
import org.thingsboard.server.common.data.kv.KvEntry;
|
||||
import org.thingsboard.server.common.data.kv.LongDataEntry;
|
||||
import org.thingsboard.server.common.data.kv.ReadTsKvQuery;
|
||||
import org.thingsboard.server.common.data.kv.StringDataEntry;
|
||||
import org.thingsboard.server.common.data.kv.TsKvEntry;
|
||||
import org.thingsboard.server.common.data.kv.*;
|
||||
import org.thingsboard.server.common.msg.cluster.SendToClusterMsg;
|
||||
import org.thingsboard.server.common.msg.cluster.ServerAddress;
|
||||
import org.thingsboard.server.dao.attributes.AttributesService;
|
||||
@ -381,7 +370,7 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio
|
||||
|
||||
private void addRemoteWsSubscription(ServerAddress address, String sessionId, Subscription subscription) {
|
||||
EntityId entityId = subscription.getEntityId();
|
||||
log.trace("[{}] Registering remote subscription [{}] for device [{}] to [{}]", sessionId, subscription.getSubscriptionId(), entityId, address);
|
||||
log.trace("[{}] Registering remote subscription [{}] for entity [{}] to [{}]", sessionId, subscription.getSubscriptionId(), entityId, address);
|
||||
registerSubscription(sessionId, entityId, subscription);
|
||||
if (subscription.getType() == TelemetryFeature.ATTRIBUTES) {
|
||||
final Map<String, Long> keyStates = subscription.getKeyStates();
|
||||
@ -401,9 +390,13 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio
|
||||
long curTs = System.currentTimeMillis();
|
||||
List<ReadTsKvQuery> queries = new ArrayList<>();
|
||||
subscription.getKeyStates().entrySet().forEach(e -> {
|
||||
queries.add(new BaseReadTsKvQuery(e.getKey(), e.getValue() + 1L, curTs));
|
||||
if (curTs > e.getValue()) {
|
||||
queries.add(new BaseReadTsKvQuery(e.getKey(), e.getValue() + 1L, curTs, 0, 1000, Aggregation.NONE));
|
||||
} else {
|
||||
log.debug("[{}] Invalid subscription [{}], entityId [{}] curTs [{}]", sessionId, subscription, entityId, curTs);
|
||||
}
|
||||
});
|
||||
|
||||
if (!queries.isEmpty()) {
|
||||
DonAsynchron.withCallback(tsService.findAll(entityId, queries),
|
||||
missedUpdates -> {
|
||||
if (missedUpdates != null && !missedUpdates.isEmpty()) {
|
||||
@ -414,6 +407,7 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio
|
||||
tsCallBackExecutor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void onAttributesUpdate(EntityId entityId, String scope, List<AttributeKvEntry> attributes) {
|
||||
Optional<ServerAddress> serverAddress = routingService.resolveById(entityId);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user