Commit d380ac710646a2aea8693ea14aba1eaa4b9f4994
1 parent
006fcd03
Device -> Server RPC implementation and improvements
Showing
28 changed files
with
266 additions
and
320 deletions
@@ -270,10 +270,6 @@ public class ActorSystemContext { | @@ -270,10 +270,6 @@ public class ActorSystemContext { | ||
270 | @Getter | 270 | @Getter |
271 | private long queuePersistenceTimeout; | 271 | private long queuePersistenceTimeout; |
272 | 272 | ||
273 | - @Value("${actors.client_side_rpc.timeout}") | ||
274 | - @Getter | ||
275 | - private long clientSideRpcTimeout; | ||
276 | - | ||
277 | @Value("${actors.rule.chain.error_persist_frequency}") | 273 | @Value("${actors.rule.chain.error_persist_frequency}") |
278 | @Getter | 274 | @Getter |
279 | private long ruleChainErrorPersistFrequency; | 275 | private long ruleChainErrorPersistFrequency; |
@@ -22,11 +22,8 @@ import org.thingsboard.server.actors.service.ContextAwareActor; | @@ -22,11 +22,8 @@ import org.thingsboard.server.actors.service.ContextAwareActor; | ||
22 | import org.thingsboard.server.common.data.id.DeviceId; | 22 | import org.thingsboard.server.common.data.id.DeviceId; |
23 | import org.thingsboard.server.common.data.id.TenantId; | 23 | import org.thingsboard.server.common.data.id.TenantId; |
24 | import org.thingsboard.server.common.msg.TbActorMsg; | 24 | import org.thingsboard.server.common.msg.TbActorMsg; |
25 | -import org.thingsboard.server.common.msg.queue.PartitionChangeMsg; | ||
26 | -import org.thingsboard.server.common.msg.timeout.DeviceActorClientSideRpcTimeoutMsg; | ||
27 | import org.thingsboard.server.common.msg.timeout.DeviceActorServerSideRpcTimeoutMsg; | 25 | import org.thingsboard.server.common.msg.timeout.DeviceActorServerSideRpcTimeoutMsg; |
28 | import org.thingsboard.server.service.rpc.ToDeviceRpcRequestActorMsg; | 26 | import org.thingsboard.server.service.rpc.ToDeviceRpcRequestActorMsg; |
29 | -import org.thingsboard.server.service.rpc.ToServerRpcResponseActorMsg; | ||
30 | import org.thingsboard.server.service.transport.msg.TransportToDeviceActorMsgWrapper; | 27 | import org.thingsboard.server.service.transport.msg.TransportToDeviceActorMsgWrapper; |
31 | 28 | ||
32 | public class DeviceActor extends ContextAwareActor { | 29 | public class DeviceActor extends ContextAwareActor { |
@@ -72,15 +69,9 @@ public class DeviceActor extends ContextAwareActor { | @@ -72,15 +69,9 @@ public class DeviceActor extends ContextAwareActor { | ||
72 | case DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG: | 69 | case DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG: |
73 | processor.processRpcRequest(context(), (ToDeviceRpcRequestActorMsg) msg); | 70 | processor.processRpcRequest(context(), (ToDeviceRpcRequestActorMsg) msg); |
74 | break; | 71 | break; |
75 | - case SERVER_RPC_RESPONSE_TO_DEVICE_ACTOR_MSG: | ||
76 | - processor.processToServerRPCResponse(context(), (ToServerRpcResponseActorMsg) msg); | ||
77 | - break; | ||
78 | case DEVICE_ACTOR_SERVER_SIDE_RPC_TIMEOUT_MSG: | 72 | case DEVICE_ACTOR_SERVER_SIDE_RPC_TIMEOUT_MSG: |
79 | processor.processServerSideRpcTimeout(context(), (DeviceActorServerSideRpcTimeoutMsg) msg); | 73 | processor.processServerSideRpcTimeout(context(), (DeviceActorServerSideRpcTimeoutMsg) msg); |
80 | break; | 74 | break; |
81 | - case DEVICE_ACTOR_CLIENT_SIDE_RPC_TIMEOUT_MSG: | ||
82 | - processor.processClientSideRpcTimeout(context(), (DeviceActorClientSideRpcTimeoutMsg) msg); | ||
83 | - break; | ||
84 | case SESSION_TIMEOUT_MSG: | 75 | case SESSION_TIMEOUT_MSG: |
85 | processor.checkSessionsTimeout(); | 76 | processor.checkSessionsTimeout(); |
86 | break; | 77 | break; |
@@ -36,12 +36,11 @@ import org.thingsboard.server.common.data.kv.AttributeKvEntry; | @@ -36,12 +36,11 @@ import org.thingsboard.server.common.data.kv.AttributeKvEntry; | ||
36 | import org.thingsboard.server.common.data.kv.KvEntry; | 36 | import org.thingsboard.server.common.data.kv.KvEntry; |
37 | import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; | 37 | import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; |
38 | import org.thingsboard.server.common.msg.TbMsgMetaData; | 38 | import org.thingsboard.server.common.msg.TbMsgMetaData; |
39 | +import org.thingsboard.server.common.msg.queue.TbCallback; | ||
39 | import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; | 40 | import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; |
40 | -import org.thingsboard.server.common.msg.timeout.DeviceActorClientSideRpcTimeoutMsg; | ||
41 | import org.thingsboard.server.common.msg.timeout.DeviceActorServerSideRpcTimeoutMsg; | 41 | import org.thingsboard.server.common.msg.timeout.DeviceActorServerSideRpcTimeoutMsg; |
42 | -import org.thingsboard.server.gen.transport.TransportProtos; | ||
43 | import org.thingsboard.server.gen.transport.TransportProtos.AttributeUpdateNotificationMsg; | 42 | import org.thingsboard.server.gen.transport.TransportProtos.AttributeUpdateNotificationMsg; |
44 | -import org.thingsboard.server.gen.transport.TransportProtos.DeviceActorToTransportMsg; | 43 | +import org.thingsboard.server.gen.transport.TransportProtos.DeviceSessionsCacheEntry; |
45 | import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeRequestMsg; | 44 | import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeRequestMsg; |
46 | import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeResponseMsg; | 45 | import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeResponseMsg; |
47 | import org.thingsboard.server.gen.transport.TransportProtos.KeyValueProto; | 46 | import org.thingsboard.server.gen.transport.TransportProtos.KeyValueProto; |
@@ -50,16 +49,19 @@ import org.thingsboard.server.gen.transport.TransportProtos.SessionCloseNotifica | @@ -50,16 +49,19 @@ import org.thingsboard.server.gen.transport.TransportProtos.SessionCloseNotifica | ||
50 | import org.thingsboard.server.gen.transport.TransportProtos.SessionEvent; | 49 | import org.thingsboard.server.gen.transport.TransportProtos.SessionEvent; |
51 | import org.thingsboard.server.gen.transport.TransportProtos.SessionEventMsg; | 50 | import org.thingsboard.server.gen.transport.TransportProtos.SessionEventMsg; |
52 | import org.thingsboard.server.gen.transport.TransportProtos.SessionInfoProto; | 51 | import org.thingsboard.server.gen.transport.TransportProtos.SessionInfoProto; |
52 | +import org.thingsboard.server.gen.transport.TransportProtos.SessionSubscriptionInfoProto; | ||
53 | +import org.thingsboard.server.gen.transport.TransportProtos.SessionType; | ||
53 | import org.thingsboard.server.gen.transport.TransportProtos.SubscribeToAttributeUpdatesMsg; | 54 | import org.thingsboard.server.gen.transport.TransportProtos.SubscribeToAttributeUpdatesMsg; |
54 | import org.thingsboard.server.gen.transport.TransportProtos.SubscribeToRPCMsg; | 55 | import org.thingsboard.server.gen.transport.TransportProtos.SubscribeToRPCMsg; |
56 | +import org.thingsboard.server.gen.transport.TransportProtos.SubscriptionInfoProto; | ||
55 | import org.thingsboard.server.gen.transport.TransportProtos.ToDeviceRpcRequestMsg; | 57 | import org.thingsboard.server.gen.transport.TransportProtos.ToDeviceRpcRequestMsg; |
56 | import org.thingsboard.server.gen.transport.TransportProtos.ToDeviceRpcResponseMsg; | 58 | import org.thingsboard.server.gen.transport.TransportProtos.ToDeviceRpcResponseMsg; |
59 | +import org.thingsboard.server.gen.transport.TransportProtos.ToServerRpcResponseMsg; | ||
60 | +import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
57 | import org.thingsboard.server.gen.transport.TransportProtos.TransportToDeviceActorMsg; | 61 | import org.thingsboard.server.gen.transport.TransportProtos.TransportToDeviceActorMsg; |
58 | import org.thingsboard.server.gen.transport.TransportProtos.TsKvProto; | 62 | import org.thingsboard.server.gen.transport.TransportProtos.TsKvProto; |
59 | -import org.thingsboard.server.common.msg.queue.TbCallback; | ||
60 | import org.thingsboard.server.service.rpc.FromDeviceRpcResponse; | 63 | import org.thingsboard.server.service.rpc.FromDeviceRpcResponse; |
61 | import org.thingsboard.server.service.rpc.ToDeviceRpcRequestActorMsg; | 64 | import org.thingsboard.server.service.rpc.ToDeviceRpcRequestActorMsg; |
62 | -import org.thingsboard.server.service.rpc.ToServerRpcResponseActorMsg; | ||
63 | import org.thingsboard.server.service.transport.msg.TransportToDeviceActorMsgWrapper; | 65 | import org.thingsboard.server.service.transport.msg.TransportToDeviceActorMsgWrapper; |
64 | 66 | ||
65 | import javax.annotation.Nullable; | 67 | import javax.annotation.Nullable; |
@@ -91,7 +93,6 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -91,7 +93,6 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
91 | private final Map<UUID, SessionInfo> attributeSubscriptions; | 93 | private final Map<UUID, SessionInfo> attributeSubscriptions; |
92 | private final Map<UUID, SessionInfo> rpcSubscriptions; | 94 | private final Map<UUID, SessionInfo> rpcSubscriptions; |
93 | private final Map<Integer, ToDeviceRpcRequestMetadata> toDeviceRpcPendingMap; | 95 | private final Map<Integer, ToDeviceRpcRequestMetadata> toDeviceRpcPendingMap; |
94 | - private final Map<Integer, ToServerRpcRequestMetadata> toServerRpcPendingMap; | ||
95 | 96 | ||
96 | private int rpcSeq = 0; | 97 | private int rpcSeq = 0; |
97 | private String deviceName; | 98 | private String deviceName; |
@@ -106,7 +107,6 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -106,7 +107,6 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
106 | this.attributeSubscriptions = new HashMap<>(); | 107 | this.attributeSubscriptions = new HashMap<>(); |
107 | this.rpcSubscriptions = new HashMap<>(); | 108 | this.rpcSubscriptions = new HashMap<>(); |
108 | this.toDeviceRpcPendingMap = new HashMap<>(); | 109 | this.toDeviceRpcPendingMap = new HashMap<>(); |
109 | - this.toServerRpcPendingMap = new HashMap<>(); | ||
110 | if (initAttributes()) { | 110 | if (initAttributes()) { |
111 | restoreSessions(); | 111 | restoreSessions(); |
112 | } | 112 | } |
@@ -142,7 +142,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -142,7 +142,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
142 | Set<UUID> syncSessionSet = new HashSet<>(); | 142 | Set<UUID> syncSessionSet = new HashSet<>(); |
143 | rpcSubscriptions.forEach((key, value) -> { | 143 | rpcSubscriptions.forEach((key, value) -> { |
144 | sendToTransport(rpcRequest, key, value.getNodeId()); | 144 | sendToTransport(rpcRequest, key, value.getNodeId()); |
145 | - if (TransportProtos.SessionType.SYNC == value.getType()) { | 145 | + if (SessionType.SYNC == value.getType()) { |
146 | syncSessionSet.add(key); | 146 | syncSessionSet.add(key); |
147 | } | 147 | } |
148 | }); | 148 | }); |
@@ -177,10 +177,10 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -177,10 +177,10 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
177 | } | 177 | } |
178 | 178 | ||
179 | private void sendPendingRequests(ActorContext context, UUID sessionId, SessionInfoProto sessionInfo) { | 179 | private void sendPendingRequests(ActorContext context, UUID sessionId, SessionInfoProto sessionInfo) { |
180 | - TransportProtos.SessionType sessionType = getSessionType(sessionId); | 180 | + SessionType sessionType = getSessionType(sessionId); |
181 | if (!toDeviceRpcPendingMap.isEmpty()) { | 181 | if (!toDeviceRpcPendingMap.isEmpty()) { |
182 | log.debug("[{}] Pushing {} pending RPC messages to new async session [{}]", deviceId, toDeviceRpcPendingMap.size(), sessionId); | 182 | log.debug("[{}] Pushing {} pending RPC messages to new async session [{}]", deviceId, toDeviceRpcPendingMap.size(), sessionId); |
183 | - if (sessionType == TransportProtos.SessionType.SYNC) { | 183 | + if (sessionType == SessionType.SYNC) { |
184 | log.debug("[{}] Cleanup sync rpc session [{}]", deviceId, sessionId); | 184 | log.debug("[{}] Cleanup sync rpc session [{}]", deviceId, sessionId); |
185 | rpcSubscriptions.remove(sessionId); | 185 | rpcSubscriptions.remove(sessionId); |
186 | } | 186 | } |
@@ -188,7 +188,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -188,7 +188,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
188 | log.debug("[{}] No pending RPC messages for new async session [{}]", deviceId, sessionId); | 188 | log.debug("[{}] No pending RPC messages for new async session [{}]", deviceId, sessionId); |
189 | } | 189 | } |
190 | Set<Integer> sentOneWayIds = new HashSet<>(); | 190 | Set<Integer> sentOneWayIds = new HashSet<>(); |
191 | - if (sessionType == TransportProtos.SessionType.ASYNC) { | 191 | + if (sessionType == SessionType.ASYNC) { |
192 | toDeviceRpcPendingMap.entrySet().forEach(processPendingRpc(context, sessionId, sessionInfo.getNodeId(), sentOneWayIds)); | 192 | toDeviceRpcPendingMap.entrySet().forEach(processPendingRpc(context, sessionId, sessionInfo.getNodeId(), sentOneWayIds)); |
193 | } else { | 193 | } else { |
194 | toDeviceRpcPendingMap.entrySet().stream().findFirst().ifPresent(processPendingRpc(context, sessionId, sessionInfo.getNodeId(), sentOneWayIds)); | 194 | toDeviceRpcPendingMap.entrySet().stream().findFirst().ifPresent(processPendingRpc(context, sessionId, sessionInfo.getNodeId(), sentOneWayIds)); |
@@ -297,46 +297,8 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -297,46 +297,8 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
297 | return new HashSet<>(strings); | 297 | return new HashSet<>(strings); |
298 | } | 298 | } |
299 | 299 | ||
300 | - private void handleClientSideRPCRequest(ActorContext context, SessionInfoProto sessionInfo, TransportProtos.ToServerRpcRequestMsg request) { | ||
301 | -// UUID sessionId = getSessionId(sessionInfo); | ||
302 | -// JsonObject json = new JsonObject(); | ||
303 | -// json.addProperty("method", request.getMethodName()); | ||
304 | -// json.add("params", JsonUtils.parse(request.getParams())); | ||
305 | -// | ||
306 | -// TbMsgMetaData requestMetaData = defaultMetaData.copy(); | ||
307 | -// requestMetaData.putValue("requestId", Integer.toString(request.getRequestId())); | ||
308 | -// TbMsg tbMsg = new TbMsg(UUIDs.timeBased(), SessionMsgType.TO_SERVER_RPC_REQUEST.name(), deviceId, requestMetaData, TbMsgDataType.JSON, gson.toJson(json), null, null, null); | ||
309 | -// context.parent().tell(new DeviceActorToRuleEngineMsg(context.self(), tbMsg), context.self()); | ||
310 | -// | ||
311 | -// scheduleMsgWithDelay(context, new DeviceActorClientSideRpcTimeoutMsg(request.getRequestId(), systemContext.getClientSideRpcTimeout()), systemContext.getClientSideRpcTimeout()); | ||
312 | -// toServerRpcPendingMap.put(request.getRequestId(), new ToServerRpcRequestMetadata(sessionId, getSessionType(sessionId), sessionInfo.getNodeId())); | ||
313 | - } | ||
314 | - | ||
315 | - private TransportProtos.SessionType getSessionType(UUID sessionId) { | ||
316 | - return sessions.containsKey(sessionId) ? TransportProtos.SessionType.ASYNC : TransportProtos.SessionType.SYNC; | ||
317 | - } | ||
318 | - | ||
319 | - void processClientSideRpcTimeout(ActorContext context, DeviceActorClientSideRpcTimeoutMsg msg) { | ||
320 | - ToServerRpcRequestMetadata data = toServerRpcPendingMap.remove(msg.getId()); | ||
321 | - if (data != null) { | ||
322 | - log.debug("[{}] Client side RPC request [{}] timeout detected!", deviceId, msg.getId()); | ||
323 | - sendToTransport(TransportProtos.ToServerRpcResponseMsg.newBuilder() | ||
324 | - .setRequestId(msg.getId()).setError("timeout").build() | ||
325 | - , data.getSessionId(), data.getNodeId()); | ||
326 | - } | ||
327 | - } | ||
328 | - | ||
329 | - void processToServerRPCResponse(ActorContext context, ToServerRpcResponseActorMsg msg) { | ||
330 | - int requestId = msg.getMsg().getRequestId(); | ||
331 | - ToServerRpcRequestMetadata data = toServerRpcPendingMap.remove(requestId); | ||
332 | - if (data != null) { | ||
333 | - log.debug("[{}] Pushing reply to [{}][{}]!", deviceId, data.getNodeId(), data.getSessionId()); | ||
334 | - sendToTransport(TransportProtos.ToServerRpcResponseMsg.newBuilder() | ||
335 | - .setRequestId(requestId).setPayload(msg.getMsg().getData()).build() | ||
336 | - , data.getSessionId(), data.getNodeId()); | ||
337 | - } else { | ||
338 | - log.debug("[{}][{}] Pending RPC request to server not found!", deviceId, requestId); | ||
339 | - } | 300 | + private SessionType getSessionType(UUID sessionId) { |
301 | + return sessions.containsKey(sessionId) ? SessionType.ASYNC : SessionType.SYNC; | ||
340 | } | 302 | } |
341 | 303 | ||
342 | void processAttributesUpdate(ActorContext context, DeviceAttributesEventNotificationMsg msg) { | 304 | void processAttributesUpdate(ActorContext context, DeviceAttributesEventNotificationMsg msg) { |
@@ -399,7 +361,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -399,7 +361,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
399 | } else { | 361 | } else { |
400 | SessionInfoMetaData sessionMD = sessions.get(sessionId); | 362 | SessionInfoMetaData sessionMD = sessions.get(sessionId); |
401 | if (sessionMD == null) { | 363 | if (sessionMD == null) { |
402 | - sessionMD = new SessionInfoMetaData(new SessionInfo(TransportProtos.SessionType.SYNC, sessionInfo.getNodeId())); | 364 | + sessionMD = new SessionInfoMetaData(new SessionInfo(SessionType.SYNC, sessionInfo.getNodeId())); |
403 | } | 365 | } |
404 | sessionMD.setSubscribedToAttributes(true); | 366 | sessionMD.setSubscribedToAttributes(true); |
405 | log.debug("[{}] Registering attributes subscription for session [{}]", deviceId, sessionId); | 367 | log.debug("[{}] Registering attributes subscription for session [{}]", deviceId, sessionId); |
@@ -420,7 +382,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -420,7 +382,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
420 | } else { | 382 | } else { |
421 | SessionInfoMetaData sessionMD = sessions.get(sessionId); | 383 | SessionInfoMetaData sessionMD = sessions.get(sessionId); |
422 | if (sessionMD == null) { | 384 | if (sessionMD == null) { |
423 | - sessionMD = new SessionInfoMetaData(new SessionInfo(TransportProtos.SessionType.SYNC, sessionInfo.getNodeId())); | 385 | + sessionMD = new SessionInfoMetaData(new SessionInfo(SessionType.SYNC, sessionInfo.getNodeId())); |
424 | } | 386 | } |
425 | sessionMD.setSubscribedToRPC(true); | 387 | sessionMD.setSubscribedToRPC(true); |
426 | log.debug("[{}] Registering rpc subscription for session [{}]", deviceId, sessionId); | 388 | log.debug("[{}] Registering rpc subscription for session [{}]", deviceId, sessionId); |
@@ -444,7 +406,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -444,7 +406,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
444 | notifyTransportAboutClosedSession(sessionIdToRemove, sessions.remove(sessionIdToRemove)); | 406 | notifyTransportAboutClosedSession(sessionIdToRemove, sessions.remove(sessionIdToRemove)); |
445 | } | 407 | } |
446 | } | 408 | } |
447 | - sessions.put(sessionId, new SessionInfoMetaData(new SessionInfo(TransportProtos.SessionType.ASYNC, sessionInfo.getNodeId()))); | 409 | + sessions.put(sessionId, new SessionInfoMetaData(new SessionInfo(SessionType.ASYNC, sessionInfo.getNodeId()))); |
448 | if (sessions.size() == 1) { | 410 | if (sessions.size() == 1) { |
449 | reportSessionOpen(); | 411 | reportSessionOpen(); |
450 | } | 412 | } |
@@ -462,10 +424,10 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -462,10 +424,10 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
462 | } | 424 | } |
463 | } | 425 | } |
464 | 426 | ||
465 | - private void handleSessionActivity(ActorContext context, SessionInfoProto sessionInfoProto, TransportProtos.SubscriptionInfoProto subscriptionInfo) { | 427 | + private void handleSessionActivity(ActorContext context, SessionInfoProto sessionInfoProto, SubscriptionInfoProto subscriptionInfo) { |
466 | UUID sessionId = getSessionId(sessionInfoProto); | 428 | UUID sessionId = getSessionId(sessionInfoProto); |
467 | SessionInfoMetaData sessionMD = sessions.computeIfAbsent(sessionId, | 429 | SessionInfoMetaData sessionMD = sessions.computeIfAbsent(sessionId, |
468 | - id -> new SessionInfoMetaData(new SessionInfo(TransportProtos.SessionType.ASYNC, sessionInfoProto.getNodeId()), 0L)); | 430 | + id -> new SessionInfoMetaData(new SessionInfo(SessionType.ASYNC, sessionInfoProto.getNodeId()), 0L)); |
469 | 431 | ||
470 | sessionMD.setLastActivityTime(subscriptionInfo.getLastActivityTime()); | 432 | sessionMD.setLastActivityTime(subscriptionInfo.getLastActivityTime()); |
471 | sessionMD.setSubscribedToAttributes(subscriptionInfo.getAttributeSubscription()); | 433 | sessionMD.setSubscribedToAttributes(subscriptionInfo.getAttributeSubscription()); |
@@ -488,7 +450,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -488,7 +450,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
488 | } | 450 | } |
489 | 451 | ||
490 | private void notifyTransportAboutClosedSession(UUID sessionId, SessionInfoMetaData sessionMd) { | 452 | private void notifyTransportAboutClosedSession(UUID sessionId, SessionInfoMetaData sessionMd) { |
491 | - DeviceActorToTransportMsg msg = DeviceActorToTransportMsg.newBuilder() | 453 | + ToTransportMsg msg = ToTransportMsg.newBuilder() |
492 | .setSessionIdMSB(sessionId.getMostSignificantBits()) | 454 | .setSessionIdMSB(sessionId.getMostSignificantBits()) |
493 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) | 455 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) |
494 | .setSessionCloseNotification(SessionCloseNotificationProto.getDefaultInstance()).build(); | 456 | .setSessionCloseNotification(SessionCloseNotificationProto.getDefaultInstance()).build(); |
@@ -504,7 +466,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -504,7 +466,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
504 | } | 466 | } |
505 | 467 | ||
506 | private void sendToTransport(GetAttributeResponseMsg responseMsg, SessionInfoProto sessionInfo) { | 468 | private void sendToTransport(GetAttributeResponseMsg responseMsg, SessionInfoProto sessionInfo) { |
507 | - DeviceActorToTransportMsg msg = DeviceActorToTransportMsg.newBuilder() | 469 | + ToTransportMsg msg = ToTransportMsg.newBuilder() |
508 | .setSessionIdMSB(sessionInfo.getSessionIdMSB()) | 470 | .setSessionIdMSB(sessionInfo.getSessionIdMSB()) |
509 | .setSessionIdLSB(sessionInfo.getSessionIdLSB()) | 471 | .setSessionIdLSB(sessionInfo.getSessionIdLSB()) |
510 | .setGetAttributesResponse(responseMsg).build(); | 472 | .setGetAttributesResponse(responseMsg).build(); |
@@ -512,7 +474,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -512,7 +474,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
512 | } | 474 | } |
513 | 475 | ||
514 | private void sendToTransport(AttributeUpdateNotificationMsg notificationMsg, UUID sessionId, String nodeId) { | 476 | private void sendToTransport(AttributeUpdateNotificationMsg notificationMsg, UUID sessionId, String nodeId) { |
515 | - DeviceActorToTransportMsg msg = DeviceActorToTransportMsg.newBuilder() | 477 | + ToTransportMsg msg = ToTransportMsg.newBuilder() |
516 | .setSessionIdMSB(sessionId.getMostSignificantBits()) | 478 | .setSessionIdMSB(sessionId.getMostSignificantBits()) |
517 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) | 479 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) |
518 | .setAttributeUpdateNotification(notificationMsg).build(); | 480 | .setAttributeUpdateNotification(notificationMsg).build(); |
@@ -520,15 +482,15 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -520,15 +482,15 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
520 | } | 482 | } |
521 | 483 | ||
522 | private void sendToTransport(ToDeviceRpcRequestMsg rpcMsg, UUID sessionId, String nodeId) { | 484 | private void sendToTransport(ToDeviceRpcRequestMsg rpcMsg, UUID sessionId, String nodeId) { |
523 | - DeviceActorToTransportMsg msg = DeviceActorToTransportMsg.newBuilder() | 485 | + ToTransportMsg msg = ToTransportMsg.newBuilder() |
524 | .setSessionIdMSB(sessionId.getMostSignificantBits()) | 486 | .setSessionIdMSB(sessionId.getMostSignificantBits()) |
525 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) | 487 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) |
526 | .setToDeviceRequest(rpcMsg).build(); | 488 | .setToDeviceRequest(rpcMsg).build(); |
527 | systemContext.getTbCoreToTransportService().process(nodeId, msg); | 489 | systemContext.getTbCoreToTransportService().process(nodeId, msg); |
528 | } | 490 | } |
529 | 491 | ||
530 | - private void sendToTransport(TransportProtos.ToServerRpcResponseMsg rpcMsg, UUID sessionId, String nodeId) { | ||
531 | - DeviceActorToTransportMsg msg = DeviceActorToTransportMsg.newBuilder() | 492 | + private void sendToTransport(ToServerRpcResponseMsg rpcMsg, UUID sessionId, String nodeId) { |
493 | + ToTransportMsg msg = ToTransportMsg.newBuilder() | ||
532 | .setSessionIdMSB(sessionId.getMostSignificantBits()) | 494 | .setSessionIdMSB(sessionId.getMostSignificantBits()) |
533 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) | 495 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) |
534 | .setToServerResponse(rpcMsg).build(); | 496 | .setToServerResponse(rpcMsg).build(); |
@@ -584,9 +546,9 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -584,9 +546,9 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
584 | 546 | ||
585 | private void restoreSessions() { | 547 | private void restoreSessions() { |
586 | log.debug("[{}] Restoring sessions from cache", deviceId); | 548 | log.debug("[{}] Restoring sessions from cache", deviceId); |
587 | - TransportProtos.DeviceSessionsCacheEntry sessionsDump = null; | 549 | + DeviceSessionsCacheEntry sessionsDump = null; |
588 | try { | 550 | try { |
589 | - sessionsDump = TransportProtos.DeviceSessionsCacheEntry.parseFrom(systemContext.getDeviceSessionCacheService().get(deviceId)); | 551 | + sessionsDump = DeviceSessionsCacheEntry.parseFrom(systemContext.getDeviceSessionCacheService().get(deviceId)); |
590 | } catch (InvalidProtocolBufferException e) { | 552 | } catch (InvalidProtocolBufferException e) { |
591 | log.warn("[{}] Failed to decode device sessions from cache", deviceId); | 553 | log.warn("[{}] Failed to decode device sessions from cache", deviceId); |
592 | return; | 554 | return; |
@@ -595,11 +557,11 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -595,11 +557,11 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
595 | log.debug("[{}] No session information found", deviceId); | 557 | log.debug("[{}] No session information found", deviceId); |
596 | return; | 558 | return; |
597 | } | 559 | } |
598 | - for (TransportProtos.SessionSubscriptionInfoProto sessionSubscriptionInfoProto : sessionsDump.getSessionsList()) { | 560 | + for (SessionSubscriptionInfoProto sessionSubscriptionInfoProto : sessionsDump.getSessionsList()) { |
599 | SessionInfoProto sessionInfoProto = sessionSubscriptionInfoProto.getSessionInfo(); | 561 | SessionInfoProto sessionInfoProto = sessionSubscriptionInfoProto.getSessionInfo(); |
600 | UUID sessionId = getSessionId(sessionInfoProto); | 562 | UUID sessionId = getSessionId(sessionInfoProto); |
601 | - SessionInfo sessionInfo = new SessionInfo(TransportProtos.SessionType.ASYNC, sessionInfoProto.getNodeId()); | ||
602 | - TransportProtos.SubscriptionInfoProto subInfo = sessionSubscriptionInfoProto.getSubscriptionInfo(); | 563 | + SessionInfo sessionInfo = new SessionInfo(SessionType.ASYNC, sessionInfoProto.getNodeId()); |
564 | + SubscriptionInfoProto subInfo = sessionSubscriptionInfoProto.getSubscriptionInfo(); | ||
603 | SessionInfoMetaData sessionMD = new SessionInfoMetaData(sessionInfo, subInfo.getLastActivityTime()); | 565 | SessionInfoMetaData sessionMD = new SessionInfoMetaData(sessionInfo, subInfo.getLastActivityTime()); |
604 | sessions.put(sessionId, sessionMD); | 566 | sessions.put(sessionId, sessionMD); |
605 | if (subInfo.getAttributeSubscription()) { | 567 | if (subInfo.getAttributeSubscription()) { |
@@ -617,27 +579,27 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -617,27 +579,27 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
617 | 579 | ||
618 | private void dumpSessions() { | 580 | private void dumpSessions() { |
619 | log.debug("[{}] Dumping sessions: {}, rpc subscriptions: {}, attribute subscriptions: {} to cache", deviceId, sessions.size(), rpcSubscriptions.size(), attributeSubscriptions.size()); | 581 | log.debug("[{}] Dumping sessions: {}, rpc subscriptions: {}, attribute subscriptions: {} to cache", deviceId, sessions.size(), rpcSubscriptions.size(), attributeSubscriptions.size()); |
620 | - List<TransportProtos.SessionSubscriptionInfoProto> sessionsList = new ArrayList<>(sessions.size()); | 582 | + List<SessionSubscriptionInfoProto> sessionsList = new ArrayList<>(sessions.size()); |
621 | sessions.forEach((uuid, sessionMD) -> { | 583 | sessions.forEach((uuid, sessionMD) -> { |
622 | - if (sessionMD.getSessionInfo().getType() == TransportProtos.SessionType.SYNC) { | 584 | + if (sessionMD.getSessionInfo().getType() == SessionType.SYNC) { |
623 | return; | 585 | return; |
624 | } | 586 | } |
625 | SessionInfo sessionInfo = sessionMD.getSessionInfo(); | 587 | SessionInfo sessionInfo = sessionMD.getSessionInfo(); |
626 | - TransportProtos.SubscriptionInfoProto subscriptionInfoProto = TransportProtos.SubscriptionInfoProto.newBuilder() | 588 | + SubscriptionInfoProto subscriptionInfoProto = SubscriptionInfoProto.newBuilder() |
627 | .setLastActivityTime(sessionMD.getLastActivityTime()) | 589 | .setLastActivityTime(sessionMD.getLastActivityTime()) |
628 | .setAttributeSubscription(sessionMD.isSubscribedToAttributes()) | 590 | .setAttributeSubscription(sessionMD.isSubscribedToAttributes()) |
629 | .setRpcSubscription(sessionMD.isSubscribedToRPC()).build(); | 591 | .setRpcSubscription(sessionMD.isSubscribedToRPC()).build(); |
630 | - TransportProtos.SessionInfoProto sessionInfoProto = TransportProtos.SessionInfoProto.newBuilder() | 592 | + SessionInfoProto sessionInfoProto = SessionInfoProto.newBuilder() |
631 | .setSessionIdMSB(uuid.getMostSignificantBits()) | 593 | .setSessionIdMSB(uuid.getMostSignificantBits()) |
632 | .setSessionIdLSB(uuid.getLeastSignificantBits()) | 594 | .setSessionIdLSB(uuid.getLeastSignificantBits()) |
633 | .setNodeId(sessionInfo.getNodeId()).build(); | 595 | .setNodeId(sessionInfo.getNodeId()).build(); |
634 | - sessionsList.add(TransportProtos.SessionSubscriptionInfoProto.newBuilder() | 596 | + sessionsList.add(SessionSubscriptionInfoProto.newBuilder() |
635 | .setSessionInfo(sessionInfoProto) | 597 | .setSessionInfo(sessionInfoProto) |
636 | .setSubscriptionInfo(subscriptionInfoProto).build()); | 598 | .setSubscriptionInfo(subscriptionInfoProto).build()); |
637 | log.debug("[{}] Dumping session: {}", deviceId, sessionMD); | 599 | log.debug("[{}] Dumping session: {}", deviceId, sessionMD); |
638 | }); | 600 | }); |
639 | systemContext.getDeviceSessionCacheService() | 601 | systemContext.getDeviceSessionCacheService() |
640 | - .put(deviceId, TransportProtos.DeviceSessionsCacheEntry.newBuilder() | 602 | + .put(deviceId, DeviceSessionsCacheEntry.newBuilder() |
641 | .addAllSessions(sessionsList).build().toByteArray()); | 603 | .addAllSessions(sessionsList).build().toByteArray()); |
642 | } | 604 | } |
643 | 605 |
@@ -37,6 +37,7 @@ import org.thingsboard.server.service.rpc.FromDeviceRpcResponse; | @@ -37,6 +37,7 @@ import org.thingsboard.server.service.rpc.FromDeviceRpcResponse; | ||
37 | 37 | ||
38 | import java.util.HashSet; | 38 | import java.util.HashSet; |
39 | import java.util.Set; | 39 | import java.util.Set; |
40 | +import java.util.UUID; | ||
40 | 41 | ||
41 | @Service | 42 | @Service |
42 | @Slf4j | 43 | @Slf4j |
@@ -100,7 +101,12 @@ public class DefaultTbClusterService implements TbClusterService { | @@ -100,7 +101,12 @@ public class DefaultTbClusterService implements TbClusterService { | ||
100 | response.getResponse().ifPresent(builder::setResponse); | 101 | response.getResponse().ifPresent(builder::setResponse); |
101 | ToRuleEngineNotificationMsg msg = ToRuleEngineNotificationMsg.newBuilder().setFromDeviceRpcResponse(builder).build(); | 102 | ToRuleEngineNotificationMsg msg = ToRuleEngineNotificationMsg.newBuilder().setFromDeviceRpcResponse(builder).build(); |
102 | producerProvider.getRuleEngineNotificationsMsgProducer().send(tpi, new TbProtoQueueMsg<>(response.getId(), msg), null); | 103 | producerProvider.getRuleEngineNotificationsMsgProducer().send(tpi, new TbProtoQueueMsg<>(response.getId(), msg), null); |
104 | + } | ||
103 | 105 | ||
106 | + @Override | ||
107 | + public void onToTransportMsg(String serviceId, ToTransportMsg response) { | ||
108 | + TopicPartitionInfo tpi = partitionService.getNotificationsTopic(ServiceType.TB_TRANSPORT, serviceId); | ||
109 | + producerProvider.getTransportNotificationsMsgProducer().send(tpi, new TbProtoQueueMsg<>(UUID.randomUUID(), response), null); | ||
104 | } | 110 | } |
105 | 111 | ||
106 | @Override | 112 | @Override |
@@ -20,6 +20,7 @@ import org.thingsboard.server.common.data.id.EntityId; | @@ -20,6 +20,7 @@ import org.thingsboard.server.common.data.id.EntityId; | ||
20 | import org.thingsboard.server.common.data.id.TenantId; | 20 | import org.thingsboard.server.common.data.id.TenantId; |
21 | import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; | 21 | import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; |
22 | import org.thingsboard.server.common.msg.TbMsg; | 22 | import org.thingsboard.server.common.msg.TbMsg; |
23 | +import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
23 | import org.thingsboard.server.service.rpc.FromDeviceRpcResponse; | 24 | import org.thingsboard.server.service.rpc.FromDeviceRpcResponse; |
24 | 25 | ||
25 | public interface TbClusterService { | 26 | public interface TbClusterService { |
@@ -32,6 +33,8 @@ public interface TbClusterService { | @@ -32,6 +33,8 @@ public interface TbClusterService { | ||
32 | 33 | ||
33 | void onToRuleEngineMsg(String targetServiceId, FromDeviceRpcResponse response); | 34 | void onToRuleEngineMsg(String targetServiceId, FromDeviceRpcResponse response); |
34 | 35 | ||
36 | + void onToTransportMsg(String targetServiceId, ToTransportMsg response); | ||
37 | + | ||
35 | void onEntityStateChange(TenantId tenantId, EntityId entityId, ComponentLifecycleEvent state); | 38 | void onEntityStateChange(TenantId tenantId, EntityId entityId, ComponentLifecycleEvent state); |
36 | 39 | ||
37 | } | 40 | } |
@@ -27,6 +27,7 @@ import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; | @@ -27,6 +27,7 @@ import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; | ||
27 | import org.thingsboard.server.common.msg.queue.ServiceType; | 27 | import org.thingsboard.server.common.msg.queue.ServiceType; |
28 | import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; | 28 | import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; |
29 | import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; | 29 | import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; |
30 | +import org.thingsboard.server.gen.transport.TransportProtos; | ||
30 | import org.thingsboard.server.queue.discovery.PartitionService; | 31 | import org.thingsboard.server.queue.discovery.PartitionService; |
31 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 32 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
32 | import org.thingsboard.server.queue.util.TbRuleEngineComponent; | 33 | import org.thingsboard.server.queue.util.TbRuleEngineComponent; |
@@ -52,6 +53,7 @@ public class DefaultTbRuleEngineRpcService implements TbRuleEngineDeviceRpcServi | @@ -52,6 +53,7 @@ public class DefaultTbRuleEngineRpcService implements TbRuleEngineDeviceRpcServi | ||
52 | private final TbClusterService clusterService; | 53 | private final TbClusterService clusterService; |
53 | private final TbServiceInfoProvider serviceInfoProvider; | 54 | private final TbServiceInfoProvider serviceInfoProvider; |
54 | 55 | ||
56 | + | ||
55 | private final ConcurrentMap<UUID, Consumer<FromDeviceRpcResponse>> toDeviceRpcRequests = new ConcurrentHashMap<>(); | 57 | private final ConcurrentMap<UUID, Consumer<FromDeviceRpcResponse>> toDeviceRpcRequests = new ConcurrentHashMap<>(); |
56 | 58 | ||
57 | private Optional<TbCoreDeviceRpcService> tbCoreRpcService; | 59 | private Optional<TbCoreDeviceRpcService> tbCoreRpcService; |
@@ -85,8 +87,16 @@ public class DefaultTbRuleEngineRpcService implements TbRuleEngineDeviceRpcServi | @@ -85,8 +87,16 @@ public class DefaultTbRuleEngineRpcService implements TbRuleEngineDeviceRpcServi | ||
85 | } | 87 | } |
86 | 88 | ||
87 | @Override | 89 | @Override |
88 | - public void sendRpcReplyToDevice(DeviceId deviceId, int requestId, String body) { | ||
89 | -// TODO 2.5 | 90 | + public void sendRpcReplyToDevice(String serviceId, UUID sessionId, int requestId, String body) { |
91 | + TransportProtos.ToServerRpcResponseMsg responseMsg = TransportProtos.ToServerRpcResponseMsg.newBuilder() | ||
92 | + .setRequestId(requestId) | ||
93 | + .setPayload(body).build(); | ||
94 | + TransportProtos.ToTransportMsg msg = TransportProtos.ToTransportMsg.newBuilder() | ||
95 | + .setSessionIdMSB(sessionId.getMostSignificantBits()) | ||
96 | + .setSessionIdLSB(sessionId.getLeastSignificantBits()) | ||
97 | + .setToServerResponse(responseMsg) | ||
98 | + .build(); | ||
99 | + clusterService.onToTransportMsg(serviceId, msg); | ||
90 | } | 100 | } |
91 | 101 | ||
92 | @Override | 102 | @Override |
application/src/main/java/org/thingsboard/server/service/rpc/ToServerRpcResponseActorMsg.java
deleted
100644 → 0
1 | -/** | ||
2 | - * Copyright © 2016-2020 The Thingsboard Authors | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | -package org.thingsboard.server.service.rpc; | ||
17 | - | ||
18 | -import lombok.Getter; | ||
19 | -import lombok.RequiredArgsConstructor; | ||
20 | -import lombok.ToString; | ||
21 | -import org.thingsboard.rule.engine.api.msg.ToDeviceActorNotificationMsg; | ||
22 | -import org.thingsboard.server.common.data.id.DeviceId; | ||
23 | -import org.thingsboard.server.common.data.id.TenantId; | ||
24 | -import org.thingsboard.server.common.msg.MsgType; | ||
25 | -import org.thingsboard.server.common.msg.core.ToServerRpcResponseMsg; | ||
26 | - | ||
27 | -/** | ||
28 | - * Created by ashvayka on 16.04.18. | ||
29 | - */ | ||
30 | -@ToString | ||
31 | -@RequiredArgsConstructor | ||
32 | -public class ToServerRpcResponseActorMsg implements ToDeviceActorNotificationMsg { | ||
33 | - | ||
34 | - @Getter | ||
35 | - private final TenantId tenantId; | ||
36 | - | ||
37 | - @Getter | ||
38 | - private final DeviceId deviceId; | ||
39 | - | ||
40 | - @Getter | ||
41 | - private final ToServerRpcResponseMsg msg; | ||
42 | - | ||
43 | - @Override | ||
44 | - public MsgType getMsgType() { | ||
45 | - return MsgType.SERVER_RPC_RESPONSE_TO_DEVICE_ACTOR_MSG; | ||
46 | - } | ||
47 | -} |
@@ -18,13 +18,14 @@ package org.thingsboard.server.service.transport; | @@ -18,13 +18,14 @@ package org.thingsboard.server.service.transport; | ||
18 | import lombok.extern.slf4j.Slf4j; | 18 | import lombok.extern.slf4j.Slf4j; |
19 | import org.springframework.beans.factory.annotation.Value; | 19 | import org.springframework.beans.factory.annotation.Value; |
20 | import org.springframework.stereotype.Service; | 20 | import org.springframework.stereotype.Service; |
21 | +import org.thingsboard.server.common.msg.queue.ServiceType; | ||
22 | +import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; | ||
23 | +import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
21 | import org.thingsboard.server.queue.TbQueueCallback; | 24 | import org.thingsboard.server.queue.TbQueueCallback; |
22 | import org.thingsboard.server.queue.TbQueueMsgMetadata; | 25 | import org.thingsboard.server.queue.TbQueueMsgMetadata; |
23 | import org.thingsboard.server.queue.TbQueueProducer; | 26 | import org.thingsboard.server.queue.TbQueueProducer; |
24 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 27 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
25 | -import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; | ||
26 | -import org.thingsboard.server.gen.transport.TransportProtos.DeviceActorToTransportMsg; | ||
27 | -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | 28 | +import org.thingsboard.server.queue.discovery.PartitionService; |
28 | import org.thingsboard.server.queue.provider.TbQueueProducerProvider; | 29 | import org.thingsboard.server.queue.provider.TbQueueProducerProvider; |
29 | import org.thingsboard.server.queue.util.TbCoreComponent; | 30 | import org.thingsboard.server.queue.util.TbCoreComponent; |
30 | 31 | ||
@@ -38,28 +39,26 @@ import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | @@ -38,28 +39,26 @@ import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | ||
38 | @TbCoreComponent | 39 | @TbCoreComponent |
39 | public class DefaultTbCoreToTransportService implements TbCoreToTransportService { | 40 | public class DefaultTbCoreToTransportService implements TbCoreToTransportService { |
40 | 41 | ||
42 | + private final PartitionService partitionService; | ||
41 | private final TbQueueProducer<TbProtoQueueMsg<ToTransportMsg>> tbTransportProducer; | 43 | private final TbQueueProducer<TbProtoQueueMsg<ToTransportMsg>> tbTransportProducer; |
42 | 44 | ||
43 | - @Value("${queue.transport.notifications_topic}") | ||
44 | - private String notificationsTopic; | ||
45 | - | ||
46 | - public DefaultTbCoreToTransportService(TbQueueProducerProvider tbQueueProducerProvider) { | 45 | + public DefaultTbCoreToTransportService(PartitionService partitionService, TbQueueProducerProvider tbQueueProducerProvider) { |
46 | + this.partitionService = partitionService; | ||
47 | this.tbTransportProducer = tbQueueProducerProvider.getTransportNotificationsMsgProducer(); | 47 | this.tbTransportProducer = tbQueueProducerProvider.getTransportNotificationsMsgProducer(); |
48 | } | 48 | } |
49 | 49 | ||
50 | @Override | 50 | @Override |
51 | - public void process(String nodeId, DeviceActorToTransportMsg msg) { | 51 | + public void process(String nodeId, ToTransportMsg msg) { |
52 | process(nodeId, msg, null, null); | 52 | process(nodeId, msg, null, null); |
53 | } | 53 | } |
54 | 54 | ||
55 | @Override | 55 | @Override |
56 | - public void process(String nodeId, DeviceActorToTransportMsg msg, Runnable onSuccess, Consumer<Throwable> onFailure) { | ||
57 | - String topic = notificationsTopic + "." + nodeId; | 56 | + public void process(String nodeId, ToTransportMsg msg, Runnable onSuccess, Consumer<Throwable> onFailure) { |
57 | + TopicPartitionInfo tpi = partitionService.getNotificationsTopic(ServiceType.TB_TRANSPORT, nodeId); | ||
58 | UUID sessionId = new UUID(msg.getSessionIdMSB(), msg.getSessionIdLSB()); | 58 | UUID sessionId = new UUID(msg.getSessionIdMSB(), msg.getSessionIdLSB()); |
59 | - ToTransportMsg transportMsg = ToTransportMsg.newBuilder().setToDeviceSessionMsg(msg).build(); | ||
60 | - log.trace("[{}][{}] Pushing session data to topic: {}", topic, sessionId, transportMsg); | ||
61 | - TbProtoQueueMsg<ToTransportMsg> queueMsg = new TbProtoQueueMsg<>(NULL_UUID, transportMsg); | ||
62 | - tbTransportProducer.send(TopicPartitionInfo.builder().topic(topic).build(), queueMsg, new QueueCallbackAdaptor(onSuccess, onFailure)); | 59 | + log.trace("[{}][{}] Pushing session data to topic: {}", tpi.getFullTopicName(), sessionId, msg); |
60 | + TbProtoQueueMsg<ToTransportMsg> queueMsg = new TbProtoQueueMsg<>(NULL_UUID, msg); | ||
61 | + tbTransportProducer.send(tpi, queueMsg, new QueueCallbackAdaptor(onSuccess, onFailure)); | ||
63 | } | 62 | } |
64 | 63 | ||
65 | private static class QueueCallbackAdaptor implements TbQueueCallback { | 64 | private static class QueueCallbackAdaptor implements TbQueueCallback { |
@@ -15,14 +15,14 @@ | @@ -15,14 +15,14 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.service.transport; | 16 | package org.thingsboard.server.service.transport; |
17 | 17 | ||
18 | -import org.thingsboard.server.gen.transport.TransportProtos; | 18 | +import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
19 | 19 | ||
20 | import java.util.function.Consumer; | 20 | import java.util.function.Consumer; |
21 | 21 | ||
22 | public interface TbCoreToTransportService { | 22 | public interface TbCoreToTransportService { |
23 | 23 | ||
24 | - void process(String nodeId, TransportProtos.DeviceActorToTransportMsg msg); | 24 | + void process(String nodeId, ToTransportMsg msg); |
25 | 25 | ||
26 | - void process(String nodeId, TransportProtos.DeviceActorToTransportMsg msg, Runnable onSuccess, Consumer<Throwable> onFailure); | 26 | + void process(String nodeId, ToTransportMsg msg, Runnable onSuccess, Consumer<Throwable> onFailure); |
27 | 27 | ||
28 | } | 28 | } |
@@ -251,8 +251,6 @@ actors: | @@ -251,8 +251,6 @@ actors: | ||
251 | enabled: "${ACTORS_QUEUE_ENABLED:true}" | 251 | enabled: "${ACTORS_QUEUE_ENABLED:true}" |
252 | # Maximum allowed timeout for persistence into the queue | 252 | # Maximum allowed timeout for persistence into the queue |
253 | timeout: "${ACTORS_QUEUE_PERSISTENCE_TIMEOUT:30000}" | 253 | timeout: "${ACTORS_QUEUE_PERSISTENCE_TIMEOUT:30000}" |
254 | - client_side_rpc: | ||
255 | - timeout: "${CLIENT_SIDE_RPC_TIMEOUT:60000}" | ||
256 | 254 | ||
257 | cache: | 255 | cache: |
258 | # caffeine or redis | 256 | # caffeine or redis |
@@ -458,6 +456,8 @@ transport: | @@ -458,6 +456,8 @@ transport: | ||
458 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" | 456 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" |
459 | # Maximum allowed string value length when processing Telemetry/Attributes JSON (0 value disables string value length check) | 457 | # Maximum allowed string value length when processing Telemetry/Attributes JSON (0 value disables string value length check) |
460 | max_string_value_length: "${JSON_MAX_STRING_VALUE_LENGTH:0}" | 458 | max_string_value_length: "${JSON_MAX_STRING_VALUE_LENGTH:0}" |
459 | + client_side_rpc: | ||
460 | + timeout: "${CLIENT_SIDE_RPC_TIMEOUT:60000}" | ||
461 | # Local HTTP transport parameters | 461 | # Local HTTP transport parameters |
462 | http: | 462 | http: |
463 | enabled: "${HTTP_ENABLED:true}" | 463 | enabled: "${HTTP_ENABLED:true}" |
@@ -552,15 +552,15 @@ queue: | @@ -552,15 +552,15 @@ queue: | ||
552 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" | 552 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" |
553 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" | 553 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" |
554 | transport_api: | 554 | transport_api: |
555 | - requests_topic: "${TB_QUEUE_TRANSPORT_API_REQUEST_TOPIC:tb.transport.api.requests}" | ||
556 | - responses_topic: "${TB_QUEUE_TRANSPORT_API_RESPONSE_TOPIC:tb.transport.api.responses}" | 555 | + requests_topic: "${TB_QUEUE_TRANSPORT_API_REQUEST_TOPIC:tb_transport.api.requests}" |
556 | + responses_topic: "${TB_QUEUE_TRANSPORT_API_RESPONSE_TOPIC:tb_transport.api.responses}" | ||
557 | max_pending_requests: "${TB_QUEUE_TRANSPORT_MAX_PENDING_REQUESTS:10000}" | 557 | max_pending_requests: "${TB_QUEUE_TRANSPORT_MAX_PENDING_REQUESTS:10000}" |
558 | max_requests_timeout: "${TB_QUEUE_TRANSPORT_MAX_REQUEST_TIMEOUT:10000}" | 558 | max_requests_timeout: "${TB_QUEUE_TRANSPORT_MAX_REQUEST_TIMEOUT:10000}" |
559 | max_callback_threads: "${TB_QUEUE_TRANSPORT_MAX_CALLBACK_THREADS:100}" | 559 | max_callback_threads: "${TB_QUEUE_TRANSPORT_MAX_CALLBACK_THREADS:100}" |
560 | request_poll_interval: "${TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS:25}" | 560 | request_poll_interval: "${TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS:25}" |
561 | response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" | 561 | response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" |
562 | core: | 562 | core: |
563 | - topic: "${TB_QUEUE_CORE_TOPIC:tb.core}" | 563 | + topic: "${TB_QUEUE_CORE_TOPIC:tb_core}" |
564 | poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" | 564 | poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" |
565 | partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" | 565 | partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" |
566 | pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" | 566 | pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -569,9 +569,9 @@ queue: | @@ -569,9 +569,9 @@ queue: | ||
569 | print-interval-ms: "${TB_QUEUE_CORE_STATS_PRINT_INTERVAL_MS:10000}" | 569 | print-interval-ms: "${TB_QUEUE_CORE_STATS_PRINT_INTERVAL_MS:10000}" |
570 | js: | 570 | js: |
571 | # JS Eval request topic | 571 | # JS Eval request topic |
572 | - request_topic: "${REMOTE_JS_EVAL_REQUEST_TOPIC:js.eval.requests}" | 572 | + request_topic: "${REMOTE_JS_EVAL_REQUEST_TOPIC:js_eval.requests}" |
573 | # JS Eval responses topic prefix that is combined with node id | 573 | # JS Eval responses topic prefix that is combined with node id |
574 | - response_topic_prefix: "${REMOTE_JS_EVAL_RESPONSE_TOPIC:js.eval.responses}" | 574 | + response_topic_prefix: "${REMOTE_JS_EVAL_RESPONSE_TOPIC:js_eval.responses}" |
575 | # JS Eval max pending requests | 575 | # JS Eval max pending requests |
576 | max_pending_requests: "${REMOTE_JS_MAX_PENDING_REQUESTS:10000}" | 576 | max_pending_requests: "${REMOTE_JS_MAX_PENDING_REQUESTS:10000}" |
577 | # JS Eval max request timeout | 577 | # JS Eval max request timeout |
@@ -581,7 +581,7 @@ queue: | @@ -581,7 +581,7 @@ queue: | ||
581 | # JS response auto commit interval | 581 | # JS response auto commit interval |
582 | response_auto_commit_interval: "${REMOTE_JS_RESPONSE_AUTO_COMMIT_INTERVAL_MS:100}" | 582 | response_auto_commit_interval: "${REMOTE_JS_RESPONSE_AUTO_COMMIT_INTERVAL_MS:100}" |
583 | rule-engine: | 583 | rule-engine: |
584 | - topic: "${TB_QUEUE_RULE_ENGINE_TOPIC:tb.rule-engine}" | 584 | + topic: "${TB_QUEUE_RULE_ENGINE_TOPIC:tb_rule_engine}" |
585 | poll-interval: "${TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS:25}" | 585 | poll-interval: "${TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS:25}" |
586 | pack-processing-timeout: "${TB_QUEUE_RULE_ENGINE_PACK_PROCESSING_TIMEOUT_MS:60000}" | 586 | pack-processing-timeout: "${TB_QUEUE_RULE_ENGINE_PACK_PROCESSING_TIMEOUT_MS:60000}" |
587 | stats: | 587 | stats: |
@@ -589,7 +589,7 @@ queue: | @@ -589,7 +589,7 @@ queue: | ||
589 | print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:10000}" | 589 | print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:10000}" |
590 | queues: | 590 | queues: |
591 | - name: "Main" | 591 | - name: "Main" |
592 | - topic: "${TB_QUEUE_RE_MAIN_TOPIC:tb.rule-engine.main}" | 592 | + topic: "${TB_QUEUE_RE_MAIN_TOPIC:tb_rule_engine.main}" |
593 | poll-interval: "${TB_QUEUE_RE_MAIN_POLL_INTERVAL_MS:25}" | 593 | poll-interval: "${TB_QUEUE_RE_MAIN_POLL_INTERVAL_MS:25}" |
594 | partitions: "${TB_QUEUE_RE_MAIN_PARTITIONS:10}" | 594 | partitions: "${TB_QUEUE_RE_MAIN_PARTITIONS:10}" |
595 | pack-processing-timeout: "${TB_QUEUE_RE_MAIN_PACK_PROCESSING_TIMEOUT_MS:60000}" | 595 | pack-processing-timeout: "${TB_QUEUE_RE_MAIN_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -604,7 +604,7 @@ queue: | @@ -604,7 +604,7 @@ queue: | ||
604 | failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages; | 604 | failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages; |
605 | pause-between-retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRY_PAUSE:3}"# Time in seconds to wait in consumer thread before retries; | 605 | pause-between-retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRY_PAUSE:3}"# Time in seconds to wait in consumer thread before retries; |
606 | - name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}" | 606 | - name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}" |
607 | - topic: "${TB_QUEUE_RE_HP_TOPIC:tb.rule-engine.hp}" | 607 | + topic: "${TB_QUEUE_RE_HP_TOPIC:tb_rule_engine.hp}" |
608 | poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}" | 608 | poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}" |
609 | partitions: "${TB_QUEUE_RE_HP_PARTITIONS:3}" | 609 | partitions: "${TB_QUEUE_RE_HP_PARTITIONS:3}" |
610 | pack-processing-timeout: "${TB_QUEUE_RE_HP_PACK_PROCESSING_TIMEOUT_MS:60000}" | 610 | pack-processing-timeout: "${TB_QUEUE_RE_HP_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -620,7 +620,7 @@ queue: | @@ -620,7 +620,7 @@ queue: | ||
620 | pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries; | 620 | pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries; |
621 | transport: | 621 | transport: |
622 | # For high priority notifications that require minimum latency and processing time | 622 | # For high priority notifications that require minimum latency and processing time |
623 | - notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb.transport.notifications}" | 623 | + notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb_transport.notifications}" |
624 | poll_interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" | 624 | poll_interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" |
625 | 625 | ||
626 | service: | 626 | service: |
@@ -89,8 +89,6 @@ public enum MsgType { | @@ -89,8 +89,6 @@ public enum MsgType { | ||
89 | 89 | ||
90 | DEVICE_ACTOR_SERVER_SIDE_RPC_TIMEOUT_MSG, | 90 | DEVICE_ACTOR_SERVER_SIDE_RPC_TIMEOUT_MSG, |
91 | 91 | ||
92 | - DEVICE_ACTOR_CLIENT_SIDE_RPC_TIMEOUT_MSG, | ||
93 | - | ||
94 | /** | 92 | /** |
95 | * Message that is sent from the Device Actor to Rule Engine. Requires acknowledgement | 93 | * Message that is sent from the Device Actor to Rule Engine. Requires acknowledgement |
96 | */ | 94 | */ |
common/message/src/main/java/org/thingsboard/server/common/msg/timeout/DeviceActorClientSideRpcTimeoutMsg.java
deleted
100644 → 0
1 | -/** | ||
2 | - * Copyright © 2016-2020 The Thingsboard Authors | ||
3 | - * | ||
4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | - * you may not use this file except in compliance with the License. | ||
6 | - * You may obtain a copy of the License at | ||
7 | - * | ||
8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | - * | ||
10 | - * Unless required by applicable law or agreed to in writing, software | ||
11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | - * See the License for the specific language governing permissions and | ||
14 | - * limitations under the License. | ||
15 | - */ | ||
16 | -package org.thingsboard.server.common.msg.timeout; | ||
17 | - | ||
18 | -import org.thingsboard.server.common.msg.MsgType; | ||
19 | - | ||
20 | -/** | ||
21 | - * @author Andrew Shvayka | ||
22 | - */ | ||
23 | -public final class DeviceActorClientSideRpcTimeoutMsg extends TimeoutMsg<Integer> { | ||
24 | - | ||
25 | - public DeviceActorClientSideRpcTimeoutMsg(Integer id, long timeout) { | ||
26 | - super(id, timeout); | ||
27 | - } | ||
28 | - | ||
29 | - @Override | ||
30 | - public MsgType getMsgType() { | ||
31 | - return MsgType.DEVICE_ACTOR_CLIENT_SIDE_RPC_TIMEOUT_MSG; | ||
32 | - } | ||
33 | -} |
@@ -196,11 +196,6 @@ public class ConsistentHashPartitionService implements PartitionService { | @@ -196,11 +196,6 @@ public class ConsistentHashPartitionService implements PartitionService { | ||
196 | } | 196 | } |
197 | } | 197 | } |
198 | 198 | ||
199 | - @Override | ||
200 | - public Set<TenantId> getIsolatedTenants(ServiceType serviceType) { | ||
201 | - throw new RuntimeException("Not Implemented!"); | ||
202 | - } | ||
203 | - | ||
204 | private Map<ServiceQueueKey, List<ServiceInfo>> getServiceKeyListMap(List<ServiceInfo> services) { | 199 | private Map<ServiceQueueKey, List<ServiceInfo>> getServiceKeyListMap(List<ServiceInfo> services) { |
205 | final Map<ServiceQueueKey, List<ServiceInfo>> currentMap = new HashMap<>(); | 200 | final Map<ServiceQueueKey, List<ServiceInfo>> currentMap = new HashMap<>(); |
206 | services.forEach(serviceInfo -> { | 201 | services.forEach(serviceInfo -> { |
@@ -47,8 +47,6 @@ public interface PartitionService { | @@ -47,8 +47,6 @@ public interface PartitionService { | ||
47 | */ | 47 | */ |
48 | Set<String> getAllServiceIds(ServiceType serviceType); | 48 | Set<String> getAllServiceIds(ServiceType serviceType); |
49 | 49 | ||
50 | - Set<TenantId> getIsolatedTenants(ServiceType serviceType); | ||
51 | - | ||
52 | /** | 50 | /** |
53 | * Each Service should start a consumer for messages that target individual service instance based on serviceId. | 51 | * Each Service should start a consumer for messages that target individual service instance based on serviceId. |
54 | * This topic is likely to have single partition, and is always assigned to the service. | 52 | * This topic is likely to have single partition, and is always assigned to the service. |
@@ -79,7 +79,7 @@ public class TBKafkaProducerTemplate<T extends TbQueueMsg> implements TbQueuePro | @@ -79,7 +79,7 @@ public class TBKafkaProducerTemplate<T extends TbQueueMsg> implements TbQueuePro | ||
79 | if (callback != null) { | 79 | if (callback != null) { |
80 | callback.onFailure(exception); | 80 | callback.onFailure(exception); |
81 | } else { | 81 | } else { |
82 | - log.warn("Producer template failure", exception); | 82 | + log.warn("Producer template failure: {}", exception.getMessage(), exception); |
83 | } | 83 | } |
84 | } | 84 | } |
85 | }); | 85 | }); |
@@ -245,16 +245,6 @@ message TransportToRuleEngineMsg { | @@ -245,16 +245,6 @@ message TransportToRuleEngineMsg { | ||
245 | ToServerRpcRequestMsg toServerRPCCallRequest = 5; | 245 | ToServerRpcRequestMsg toServerRPCCallRequest = 5; |
246 | } | 246 | } |
247 | 247 | ||
248 | -message DeviceActorToTransportMsg { | ||
249 | - int64 sessionIdMSB = 1; | ||
250 | - int64 sessionIdLSB = 2; | ||
251 | - SessionCloseNotificationProto sessionCloseNotification = 3; | ||
252 | - GetAttributeResponseMsg getAttributesResponse = 4; | ||
253 | - AttributeUpdateNotificationMsg attributeUpdateNotification = 5; | ||
254 | - ToDeviceRpcRequestMsg toDeviceRequest = 6; | ||
255 | - ToServerRpcResponseMsg toServerResponse = 7; | ||
256 | -} | ||
257 | - | ||
258 | /** | 248 | /** |
259 | * TB Core Data Structures | 249 | * TB Core Data Structures |
260 | */ | 250 | */ |
@@ -410,5 +400,11 @@ message ToRuleEngineNotificationMsg { | @@ -410,5 +400,11 @@ message ToRuleEngineNotificationMsg { | ||
410 | 400 | ||
411 | /* Messages that are handled by ThingsBoard Transport Service */ | 401 | /* Messages that are handled by ThingsBoard Transport Service */ |
412 | message ToTransportMsg { | 402 | message ToTransportMsg { |
413 | - DeviceActorToTransportMsg toDeviceSessionMsg = 1; | 403 | + int64 sessionIdMSB = 1; |
404 | + int64 sessionIdLSB = 2; | ||
405 | + SessionCloseNotificationProto sessionCloseNotification = 3; | ||
406 | + GetAttributeResponseMsg getAttributesResponse = 4; | ||
407 | + AttributeUpdateNotificationMsg attributeUpdateNotification = 5; | ||
408 | + ToDeviceRpcRequestMsg toDeviceRequest = 6; | ||
409 | + ToServerRpcResponseMsg toServerResponse = 7; | ||
414 | } | 410 | } |
common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportResource.java
@@ -303,6 +303,8 @@ public class CoapTransportResource extends CoapResource { | @@ -303,6 +303,8 @@ public class CoapTransportResource extends CoapResource { | ||
303 | .setDeviceIdLSB(deviceInfoProto.getDeviceIdLSB()) | 303 | .setDeviceIdLSB(deviceInfoProto.getDeviceIdLSB()) |
304 | .setSessionIdMSB(sessionId.getMostSignificantBits()) | 304 | .setSessionIdMSB(sessionId.getMostSignificantBits()) |
305 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) | 305 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) |
306 | + .setDeviceName(msg.getDeviceInfo().getDeviceName()) | ||
307 | + .setDeviceType(msg.getDeviceInfo().getDeviceType()) | ||
306 | .build(); | 308 | .build(); |
307 | onSuccess.accept(sessionInfo); | 309 | onSuccess.accept(sessionInfo); |
308 | } else { | 310 | } else { |
@@ -221,6 +221,8 @@ public class DeviceApiController { | @@ -221,6 +221,8 @@ public class DeviceApiController { | ||
221 | .setDeviceIdLSB(deviceInfoProto.getDeviceIdLSB()) | 221 | .setDeviceIdLSB(deviceInfoProto.getDeviceIdLSB()) |
222 | .setSessionIdMSB(sessionId.getMostSignificantBits()) | 222 | .setSessionIdMSB(sessionId.getMostSignificantBits()) |
223 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) | 223 | .setSessionIdLSB(sessionId.getLeastSignificantBits()) |
224 | + .setDeviceName(msg.getDeviceInfo().getDeviceName()) | ||
225 | + .setDeviceType(msg.getDeviceInfo().getDeviceType()) | ||
224 | .build(); | 226 | .build(); |
225 | onSuccess.accept(sessionInfo); | 227 | onSuccess.accept(sessionInfo); |
226 | } else { | 228 | } else { |
@@ -507,6 +507,8 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement | @@ -507,6 +507,8 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement | ||
507 | .setDeviceIdLSB(msg.getDeviceInfo().getDeviceIdLSB()) | 507 | .setDeviceIdLSB(msg.getDeviceInfo().getDeviceIdLSB()) |
508 | .setTenantIdMSB(msg.getDeviceInfo().getTenantIdMSB()) | 508 | .setTenantIdMSB(msg.getDeviceInfo().getTenantIdMSB()) |
509 | .setTenantIdLSB(msg.getDeviceInfo().getTenantIdLSB()) | 509 | .setTenantIdLSB(msg.getDeviceInfo().getTenantIdLSB()) |
510 | + .setDeviceName(msg.getDeviceInfo().getDeviceName()) | ||
511 | + .setDeviceType(msg.getDeviceInfo().getDeviceType()) | ||
510 | .build(); | 512 | .build(); |
511 | transportService.process(sessionInfo, DefaultTransportService.getSessionEventMsg(SessionEvent.OPEN), null); | 513 | transportService.process(sessionInfo, DefaultTransportService.getSessionEventMsg(SessionEvent.OPEN), null); |
512 | transportService.registerAsyncSession(sessionInfo, this); | 514 | transportService.registerAsyncSession(sessionInfo, this); |
@@ -44,6 +44,8 @@ public class GatewayDeviceSessionCtx extends MqttDeviceAwareSessionContext imple | @@ -44,6 +44,8 @@ public class GatewayDeviceSessionCtx extends MqttDeviceAwareSessionContext imple | ||
44 | .setDeviceIdLSB(deviceInfo.getDeviceIdLSB()) | 44 | .setDeviceIdLSB(deviceInfo.getDeviceIdLSB()) |
45 | .setTenantIdMSB(deviceInfo.getTenantIdMSB()) | 45 | .setTenantIdMSB(deviceInfo.getTenantIdMSB()) |
46 | .setTenantIdLSB(deviceInfo.getTenantIdLSB()) | 46 | .setTenantIdLSB(deviceInfo.getTenantIdLSB()) |
47 | + .setDeviceName(deviceInfo.getDeviceName()) | ||
48 | + .setDeviceType(deviceInfo.getDeviceType()) | ||
47 | .build(); | 49 | .build(); |
48 | setDeviceInfo(deviceInfo); | 50 | setDeviceInfo(deviceInfo); |
49 | } | 51 | } |
@@ -18,36 +18,25 @@ package org.thingsboard.server.common.transport.service; | @@ -18,36 +18,25 @@ package org.thingsboard.server.common.transport.service; | ||
18 | import com.google.gson.Gson; | 18 | import com.google.gson.Gson; |
19 | import com.google.gson.JsonObject; | 19 | import com.google.gson.JsonObject; |
20 | import lombok.extern.slf4j.Slf4j; | 20 | import lombok.extern.slf4j.Slf4j; |
21 | -import org.springframework.beans.factory.annotation.Autowired; | ||
22 | import org.springframework.beans.factory.annotation.Value; | 21 | import org.springframework.beans.factory.annotation.Value; |
23 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | 22 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
24 | import org.springframework.stereotype.Service; | 23 | import org.springframework.stereotype.Service; |
25 | import org.thingsboard.common.util.ThingsBoardThreadFactory; | 24 | import org.thingsboard.common.util.ThingsBoardThreadFactory; |
26 | -import org.thingsboard.server.common.msg.TbMsg; | ||
27 | -import org.thingsboard.server.common.msg.TbMsgMetaData; | ||
28 | -import org.thingsboard.server.common.msg.session.SessionMsgType; | ||
29 | -import org.thingsboard.server.common.transport.util.JsonUtils; | ||
30 | -import org.thingsboard.server.queue.TbQueueCallback; | ||
31 | -import org.thingsboard.server.queue.TbQueueConsumer; | ||
32 | -import org.thingsboard.server.queue.TbQueueMsgMetadata; | ||
33 | -import org.thingsboard.server.queue.TbQueueProducer; | ||
34 | -import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
35 | -import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
36 | import org.thingsboard.server.common.data.EntityType; | 25 | import org.thingsboard.server.common.data.EntityType; |
37 | import org.thingsboard.server.common.data.id.DeviceId; | 26 | import org.thingsboard.server.common.data.id.DeviceId; |
38 | import org.thingsboard.server.common.data.id.TenantId; | 27 | import org.thingsboard.server.common.data.id.TenantId; |
28 | +import org.thingsboard.server.common.msg.TbMsg; | ||
29 | +import org.thingsboard.server.common.msg.TbMsgDataType; | ||
30 | +import org.thingsboard.server.common.msg.TbMsgMetaData; | ||
31 | +import org.thingsboard.server.common.msg.queue.ServiceType; | ||
32 | +import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; | ||
33 | +import org.thingsboard.server.common.msg.session.SessionMsgType; | ||
39 | import org.thingsboard.server.common.msg.tools.TbRateLimits; | 34 | import org.thingsboard.server.common.msg.tools.TbRateLimits; |
40 | import org.thingsboard.server.common.msg.tools.TbRateLimitsException; | 35 | import org.thingsboard.server.common.msg.tools.TbRateLimitsException; |
41 | import org.thingsboard.server.common.transport.SessionMsgListener; | 36 | import org.thingsboard.server.common.transport.SessionMsgListener; |
42 | import org.thingsboard.server.common.transport.TransportService; | 37 | import org.thingsboard.server.common.transport.TransportService; |
43 | import org.thingsboard.server.common.transport.TransportServiceCallback; | 38 | import org.thingsboard.server.common.transport.TransportServiceCallback; |
44 | -import org.thingsboard.server.queue.discovery.PartitionService; | ||
45 | -import org.thingsboard.server.common.msg.queue.ServiceType; | ||
46 | -import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; | ||
47 | -import org.thingsboard.server.queue.discovery.TenantRoutingInfo; | ||
48 | -import org.thingsboard.server.queue.discovery.TenantRoutingInfoService; | ||
49 | -import org.thingsboard.server.queue.provider.TbQueueProducerProvider; | ||
50 | -import org.thingsboard.server.queue.provider.TbTransportQueueFactory; | 39 | +import org.thingsboard.server.common.transport.util.JsonUtils; |
51 | import org.thingsboard.server.gen.transport.TransportProtos; | 40 | import org.thingsboard.server.gen.transport.TransportProtos; |
52 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 41 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
53 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 42 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
@@ -55,11 +44,23 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | @@ -55,11 +44,23 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
55 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; | 44 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; |
56 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 45 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
57 | import org.thingsboard.server.gen.transport.TransportProtos.TransportToDeviceActorMsg; | 46 | import org.thingsboard.server.gen.transport.TransportProtos.TransportToDeviceActorMsg; |
47 | +import org.thingsboard.server.queue.TbQueueCallback; | ||
48 | +import org.thingsboard.server.queue.TbQueueConsumer; | ||
49 | +import org.thingsboard.server.queue.TbQueueMsgMetadata; | ||
50 | +import org.thingsboard.server.queue.TbQueueProducer; | ||
51 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
58 | import org.thingsboard.server.queue.common.AsyncCallbackTemplate; | 52 | import org.thingsboard.server.queue.common.AsyncCallbackTemplate; |
53 | +import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
54 | +import org.thingsboard.server.queue.discovery.PartitionService; | ||
55 | +import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | ||
56 | +import org.thingsboard.server.queue.provider.TbQueueProducerProvider; | ||
57 | +import org.thingsboard.server.queue.provider.TbTransportQueueFactory; | ||
59 | 58 | ||
60 | import javax.annotation.PostConstruct; | 59 | import javax.annotation.PostConstruct; |
61 | import javax.annotation.PreDestroy; | 60 | import javax.annotation.PreDestroy; |
61 | +import java.util.Collections; | ||
62 | import java.util.List; | 62 | import java.util.List; |
63 | +import java.util.Map; | ||
63 | import java.util.Random; | 64 | import java.util.Random; |
64 | import java.util.UUID; | 65 | import java.util.UUID; |
65 | import java.util.concurrent.ConcurrentHashMap; | 66 | import java.util.concurrent.ConcurrentHashMap; |
@@ -90,6 +91,8 @@ public class DefaultTransportService implements TransportService { | @@ -90,6 +91,8 @@ public class DefaultTransportService implements TransportService { | ||
90 | private long sessionInactivityTimeout; | 91 | private long sessionInactivityTimeout; |
91 | @Value("${transport.sessions.report_timeout}") | 92 | @Value("${transport.sessions.report_timeout}") |
92 | private long sessionReportTimeout; | 93 | private long sessionReportTimeout; |
94 | + @Value("${transport.client_side_rpc.timeout:60000}") | ||
95 | + private long clientSideRpcTimeout; | ||
93 | @Value("${queue.transport.poll_interval}") | 96 | @Value("${queue.transport.poll_interval}") |
94 | private int notificationsPollDuration; | 97 | private int notificationsPollDuration; |
95 | 98 | ||
@@ -97,6 +100,7 @@ public class DefaultTransportService implements TransportService { | @@ -97,6 +100,7 @@ public class DefaultTransportService implements TransportService { | ||
97 | private final TbTransportQueueFactory queueProvider; | 100 | private final TbTransportQueueFactory queueProvider; |
98 | private final TbQueueProducerProvider producerProvider; | 101 | private final TbQueueProducerProvider producerProvider; |
99 | private final PartitionService partitionService; | 102 | private final PartitionService partitionService; |
103 | + private final TbServiceInfoProvider serviceInfoProvider; | ||
100 | 104 | ||
101 | protected TbQueueRequestTemplate<TbProtoQueueMsg<TransportApiRequestMsg>, TbProtoQueueMsg<TransportApiResponseMsg>> transportApiRequestTemplate; | 105 | protected TbQueueRequestTemplate<TbProtoQueueMsg<TransportApiRequestMsg>, TbProtoQueueMsg<TransportApiResponseMsg>> transportApiRequestTemplate; |
102 | protected TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> ruleEngineMsgProducer; | 106 | protected TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> ruleEngineMsgProducer; |
@@ -106,15 +110,17 @@ public class DefaultTransportService implements TransportService { | @@ -106,15 +110,17 @@ public class DefaultTransportService implements TransportService { | ||
106 | protected ScheduledExecutorService schedulerExecutor; | 110 | protected ScheduledExecutorService schedulerExecutor; |
107 | protected ExecutorService transportCallbackExecutor; | 111 | protected ExecutorService transportCallbackExecutor; |
108 | 112 | ||
109 | - private ConcurrentMap<UUID, SessionMetaData> sessions = new ConcurrentHashMap<>(); | 113 | + private final ConcurrentMap<UUID, SessionMetaData> sessions = new ConcurrentHashMap<>(); |
114 | + private final Map<String, RpcRequestMetadata> toServerRpcPendingMap = new ConcurrentHashMap<>(); | ||
110 | //TODO: Implement cleanup of this maps. | 115 | //TODO: Implement cleanup of this maps. |
111 | - private ConcurrentMap<TenantId, TbRateLimits> perTenantLimits = new ConcurrentHashMap<>(); | ||
112 | - private ConcurrentMap<DeviceId, TbRateLimits> perDeviceLimits = new ConcurrentHashMap<>(); | 116 | + private final ConcurrentMap<TenantId, TbRateLimits> perTenantLimits = new ConcurrentHashMap<>(); |
117 | + private final ConcurrentMap<DeviceId, TbRateLimits> perDeviceLimits = new ConcurrentHashMap<>(); | ||
113 | 118 | ||
114 | private ExecutorService mainConsumerExecutor = Executors.newSingleThreadExecutor(ThingsBoardThreadFactory.forName("transport-consumer")); | 119 | private ExecutorService mainConsumerExecutor = Executors.newSingleThreadExecutor(ThingsBoardThreadFactory.forName("transport-consumer")); |
115 | private volatile boolean stopped = false; | 120 | private volatile boolean stopped = false; |
116 | 121 | ||
117 | - public DefaultTransportService(TbTransportQueueFactory queueProvider, TbQueueProducerProvider producerProvider, PartitionService partitionService) { | 122 | + public DefaultTransportService(TbServiceInfoProvider serviceInfoProvider, TbTransportQueueFactory queueProvider, TbQueueProducerProvider producerProvider, PartitionService partitionService) { |
123 | + this.serviceInfoProvider = serviceInfoProvider; | ||
118 | this.queueProvider = queueProvider; | 124 | this.queueProvider = queueProvider; |
119 | this.producerProvider = producerProvider; | 125 | this.producerProvider = producerProvider; |
120 | this.partitionService = partitionService; | 126 | this.partitionService = partitionService; |
@@ -134,7 +140,8 @@ public class DefaultTransportService implements TransportService { | @@ -134,7 +140,8 @@ public class DefaultTransportService implements TransportService { | ||
134 | ruleEngineMsgProducer = producerProvider.getRuleEngineMsgProducer(); | 140 | ruleEngineMsgProducer = producerProvider.getRuleEngineMsgProducer(); |
135 | tbCoreMsgProducer = producerProvider.getTbCoreMsgProducer(); | 141 | tbCoreMsgProducer = producerProvider.getTbCoreMsgProducer(); |
136 | transportNotificationsConsumer = queueProvider.createTransportNotificationsConsumer(); | 142 | transportNotificationsConsumer = queueProvider.createTransportNotificationsConsumer(); |
137 | - transportNotificationsConsumer.subscribe(); | 143 | + TopicPartitionInfo tpi = partitionService.getNotificationsTopic(ServiceType.TB_TRANSPORT, serviceInfoProvider.getServiceId()); |
144 | + transportNotificationsConsumer.subscribe(Collections.singleton(tpi)); | ||
138 | transportApiRequestTemplate.init(); | 145 | transportApiRequestTemplate.init(); |
139 | mainConsumerExecutor.execute(() -> { | 146 | mainConsumerExecutor.execute(() -> { |
140 | while (!stopped) { | 147 | while (!stopped) { |
@@ -145,10 +152,7 @@ public class DefaultTransportService implements TransportService { | @@ -145,10 +152,7 @@ public class DefaultTransportService implements TransportService { | ||
145 | } | 152 | } |
146 | records.forEach(record -> { | 153 | records.forEach(record -> { |
147 | try { | 154 | try { |
148 | - ToTransportMsg toTransportMsg = record.getValue(); | ||
149 | - if (toTransportMsg.hasToDeviceSessionMsg()) { | ||
150 | - processToTransportMsg(toTransportMsg.getToDeviceSessionMsg()); | ||
151 | - } | 155 | + processToTransportMsg(record.getValue()); |
152 | } catch (Throwable e) { | 156 | } catch (Throwable e) { |
153 | log.warn("Failed to process the notification.", e); | 157 | log.warn("Failed to process the notification.", e); |
154 | } | 158 | } |
@@ -195,7 +199,7 @@ public class DefaultTransportService implements TransportService { | @@ -195,7 +199,7 @@ public class DefaultTransportService implements TransportService { | ||
195 | 199 | ||
196 | @Override | 200 | @Override |
197 | public void registerAsyncSession(TransportProtos.SessionInfoProto sessionInfo, SessionMsgListener listener) { | 201 | public void registerAsyncSession(TransportProtos.SessionInfoProto sessionInfo, SessionMsgListener listener) { |
198 | - sessions.putIfAbsent(toId(sessionInfo), new SessionMetaData(sessionInfo, TransportProtos.SessionType.ASYNC, listener)); | 202 | + sessions.putIfAbsent(toSessionId(sessionInfo), new SessionMetaData(sessionInfo, TransportProtos.SessionType.ASYNC, listener)); |
199 | } | 203 | } |
200 | 204 | ||
201 | @Override | 205 | @Override |
@@ -210,22 +214,6 @@ public class DefaultTransportService implements TransportService { | @@ -210,22 +214,6 @@ public class DefaultTransportService implements TransportService { | ||
210 | } | 214 | } |
211 | } | 215 | } |
212 | 216 | ||
213 | - public TenantRoutingInfo getRoutingInfo(TenantId tenantId) { | ||
214 | - | ||
215 | - TransportProtos.GetTenantRoutingInfoRequestMsg msg = TransportProtos.GetTenantRoutingInfoRequestMsg.newBuilder() | ||
216 | - .setTenantIdMSB(tenantId.getId().getMostSignificantBits()) | ||
217 | - .setTenantIdLSB(tenantId.getId().getLeastSignificantBits()) | ||
218 | - .build(); | ||
219 | - TbProtoQueueMsg<TransportApiRequestMsg> protoMsg = new TbProtoQueueMsg<>(UUID.randomUUID(), TransportApiRequestMsg.newBuilder().setGetTenantRoutingInfoRequestMsg(msg).build()); | ||
220 | - try { | ||
221 | - TbProtoQueueMsg<TransportApiResponseMsg> response = transportApiRequestTemplate.send(protoMsg).get(); | ||
222 | - TransportProtos.GetTenantRoutingInfoResponseMsg routingInfo = response.getValue().getGetTenantRoutingInfoResponseMsg(); | ||
223 | - return new TenantRoutingInfo(tenantId, routingInfo.getIsolatedTbCore(), routingInfo.getIsolatedTbRuleEngine()); | ||
224 | - } catch (InterruptedException | ExecutionException e) { | ||
225 | - throw new RuntimeException(e); | ||
226 | - } | ||
227 | - } | ||
228 | - | ||
229 | @Override | 217 | @Override |
230 | public void process(TransportProtos.ValidateDeviceTokenRequestMsg msg, TransportServiceCallback<TransportProtos.ValidateDeviceCredentialsResponseMsg> callback) { | 218 | public void process(TransportProtos.ValidateDeviceTokenRequestMsg msg, TransportServiceCallback<TransportProtos.ValidateDeviceCredentialsResponseMsg> callback) { |
231 | log.trace("Processing msg: {}", msg); | 219 | log.trace("Processing msg: {}", msg); |
@@ -253,7 +241,7 @@ public class DefaultTransportService implements TransportService { | @@ -253,7 +241,7 @@ public class DefaultTransportService implements TransportService { | ||
253 | @Override | 241 | @Override |
254 | public void process(TransportProtos.SessionInfoProto sessionInfo, TransportProtos.SubscriptionInfoProto msg, TransportServiceCallback<Void> callback) { | 242 | public void process(TransportProtos.SessionInfoProto sessionInfo, TransportProtos.SubscriptionInfoProto msg, TransportServiceCallback<Void> callback) { |
255 | if (log.isTraceEnabled()) { | 243 | if (log.isTraceEnabled()) { |
256 | - log.trace("[{}] Processing msg: {}", toId(sessionInfo), msg); | 244 | + log.trace("[{}] Processing msg: {}", toSessionId(sessionInfo), msg); |
257 | } | 245 | } |
258 | sendToDeviceActor(sessionInfo, TransportToDeviceActorMsg.newBuilder().setSessionInfo(sessionInfo) | 246 | sendToDeviceActor(sessionInfo, TransportToDeviceActorMsg.newBuilder().setSessionInfo(sessionInfo) |
259 | .setSubscriptionInfo(msg).build(), callback); | 247 | .setSubscriptionInfo(msg).build(), callback); |
@@ -340,13 +328,51 @@ public class DefaultTransportService implements TransportService { | @@ -340,13 +328,51 @@ public class DefaultTransportService implements TransportService { | ||
340 | } | 328 | } |
341 | } | 329 | } |
342 | 330 | ||
343 | - //TODO 2.5: Need to handle timeouts on the transport level and not on the Device Actor Level. | 331 | + private void processTimeout(String requestId) { |
332 | + RpcRequestMetadata data = toServerRpcPendingMap.remove(requestId); | ||
333 | + if (data != null) { | ||
334 | + SessionMetaData md = sessions.get(data.getSessionId()); | ||
335 | + if (md != null) { | ||
336 | + SessionMsgListener listener = md.getListener(); | ||
337 | + transportCallbackExecutor.submit(() -> { | ||
338 | + TransportProtos.ToServerRpcResponseMsg responseMsg = | ||
339 | + TransportProtos.ToServerRpcResponseMsg.newBuilder() | ||
340 | + .setRequestId(data.getRequestId()) | ||
341 | + .setError("timeout").build(); | ||
342 | + listener.onToServerRpcResponse(responseMsg); | ||
343 | + }); | ||
344 | + if (md.getSessionType() == TransportProtos.SessionType.SYNC) { | ||
345 | + deregisterSession(md.getSessionInfo()); | ||
346 | + } | ||
347 | + } else { | ||
348 | + log.debug("[{}] Missing session.", data.getSessionId()); | ||
349 | + } | ||
350 | + } | ||
351 | + } | ||
352 | + | ||
344 | @Override | 353 | @Override |
345 | public void process(TransportProtos.SessionInfoProto sessionInfo, TransportProtos.ToServerRpcRequestMsg msg, TransportServiceCallback<Void> callback) { | 354 | public void process(TransportProtos.SessionInfoProto sessionInfo, TransportProtos.ToServerRpcRequestMsg msg, TransportServiceCallback<Void> callback) { |
346 | if (checkLimits(sessionInfo, msg, callback)) { | 355 | if (checkLimits(sessionInfo, msg, callback)) { |
347 | reportActivityInternal(sessionInfo); | 356 | reportActivityInternal(sessionInfo); |
348 | -// sendToRuleEngine(sessionInfo, TransportToRuleEngineMsg.newBuilder().setSessionInfo(sessionInfo). | ||
349 | -// setToServerRPCCallRequest(msg).build(), new TransportTbQueueCallback(callback)); | 357 | + UUID sessionId = toSessionId(sessionInfo); |
358 | + TenantId tenantId = getTenantId(sessionInfo); | ||
359 | + DeviceId deviceId = getDeviceId(sessionInfo); | ||
360 | + JsonObject json = new JsonObject(); | ||
361 | + json.addProperty("method", msg.getMethodName()); | ||
362 | + json.add("params", JsonUtils.parse(msg.getParams())); | ||
363 | + | ||
364 | + TbMsgMetaData metaData = new TbMsgMetaData(); | ||
365 | + metaData.putValue("deviceName", sessionInfo.getDeviceName()); | ||
366 | + metaData.putValue("deviceType", sessionInfo.getDeviceType()); | ||
367 | + metaData.putValue("requestId", Integer.toString(msg.getRequestId())); | ||
368 | + metaData.putValue("serviceId", serviceInfoProvider.getServiceId()); | ||
369 | + metaData.putValue("sessionId", sessionId.toString()); | ||
370 | + TbMsg tbMsg = TbMsg.newMsg(SessionMsgType.TO_SERVER_RPC_REQUEST.name(), deviceId, metaData, TbMsgDataType.JSON, gson.toJson(json)); | ||
371 | + sendToRuleEngine(tenantId, tbMsg, new TransportTbQueueCallback(callback)); | ||
372 | + | ||
373 | + String requestId = sessionId + "-" + msg.getRequestId(); | ||
374 | + toServerRpcPendingMap.put(requestId, new RpcRequestMetadata(sessionId, msg.getRequestId())); | ||
375 | + schedulerExecutor.schedule(() -> processTimeout(requestId), clientSideRpcTimeout, TimeUnit.MILLISECONDS); | ||
350 | } | 376 | } |
351 | } | 377 | } |
352 | 378 | ||
@@ -364,7 +390,7 @@ public class DefaultTransportService implements TransportService { | @@ -364,7 +390,7 @@ public class DefaultTransportService implements TransportService { | ||
364 | } | 390 | } |
365 | 391 | ||
366 | private SessionMetaData reportActivityInternal(TransportProtos.SessionInfoProto sessionInfo) { | 392 | private SessionMetaData reportActivityInternal(TransportProtos.SessionInfoProto sessionInfo) { |
367 | - UUID sessionId = toId(sessionInfo); | 393 | + UUID sessionId = toSessionId(sessionInfo); |
368 | SessionMetaData sessionMetaData = sessions.get(sessionId); | 394 | SessionMetaData sessionMetaData = sessions.get(sessionId); |
369 | if (sessionMetaData != null) { | 395 | if (sessionMetaData != null) { |
370 | sessionMetaData.updateLastActivityTime(); | 396 | sessionMetaData.updateLastActivityTime(); |
@@ -377,7 +403,7 @@ public class DefaultTransportService implements TransportService { | @@ -377,7 +403,7 @@ public class DefaultTransportService implements TransportService { | ||
377 | sessions.forEach((uuid, sessionMD) -> { | 403 | sessions.forEach((uuid, sessionMD) -> { |
378 | if (sessionMD.getLastActivityTime() < expTime) { | 404 | if (sessionMD.getLastActivityTime() < expTime) { |
379 | if (log.isDebugEnabled()) { | 405 | if (log.isDebugEnabled()) { |
380 | - log.debug("[{}] Session has expired due to last activity time: {}", toId(sessionMD.getSessionInfo()), sessionMD.getLastActivityTime()); | 406 | + log.debug("[{}] Session has expired due to last activity time: {}", toSessionId(sessionMD.getSessionInfo()), sessionMD.getLastActivityTime()); |
381 | } | 407 | } |
382 | process(sessionMD.getSessionInfo(), getSessionEventMsg(TransportProtos.SessionEvent.CLOSED), null); | 408 | process(sessionMD.getSessionInfo(), getSessionEventMsg(TransportProtos.SessionEvent.CLOSED), null); |
383 | sessions.remove(uuid); | 409 | sessions.remove(uuid); |
@@ -407,7 +433,7 @@ public class DefaultTransportService implements TransportService { | @@ -407,7 +433,7 @@ public class DefaultTransportService implements TransportService { | ||
407 | @Override | 433 | @Override |
408 | public void registerSyncSession(TransportProtos.SessionInfoProto sessionInfo, SessionMsgListener listener, long timeout) { | 434 | public void registerSyncSession(TransportProtos.SessionInfoProto sessionInfo, SessionMsgListener listener, long timeout) { |
409 | SessionMetaData currentSession = new SessionMetaData(sessionInfo, TransportProtos.SessionType.SYNC, listener); | 435 | SessionMetaData currentSession = new SessionMetaData(sessionInfo, TransportProtos.SessionType.SYNC, listener); |
410 | - sessions.putIfAbsent(toId(sessionInfo), currentSession); | 436 | + sessions.putIfAbsent(toSessionId(sessionInfo), currentSession); |
411 | 437 | ||
412 | ScheduledFuture executorFuture = schedulerExecutor.schedule(() -> { | 438 | ScheduledFuture executorFuture = schedulerExecutor.schedule(() -> { |
413 | listener.onRemoteSessionCloseCommand(TransportProtos.SessionCloseNotificationProto.getDefaultInstance()); | 439 | listener.onRemoteSessionCloseCommand(TransportProtos.SessionCloseNotificationProto.getDefaultInstance()); |
@@ -419,18 +445,18 @@ public class DefaultTransportService implements TransportService { | @@ -419,18 +445,18 @@ public class DefaultTransportService implements TransportService { | ||
419 | 445 | ||
420 | @Override | 446 | @Override |
421 | public void deregisterSession(TransportProtos.SessionInfoProto sessionInfo) { | 447 | public void deregisterSession(TransportProtos.SessionInfoProto sessionInfo) { |
422 | - SessionMetaData currentSession = sessions.get(toId(sessionInfo)); | 448 | + SessionMetaData currentSession = sessions.get(toSessionId(sessionInfo)); |
423 | if (currentSession != null && currentSession.hasScheduledFuture()) { | 449 | if (currentSession != null && currentSession.hasScheduledFuture()) { |
424 | log.debug("Stopping scheduler to avoid resending response if request has been ack."); | 450 | log.debug("Stopping scheduler to avoid resending response if request has been ack."); |
425 | currentSession.getScheduledFuture().cancel(false); | 451 | currentSession.getScheduledFuture().cancel(false); |
426 | } | 452 | } |
427 | - sessions.remove(toId(sessionInfo)); | 453 | + sessions.remove(toSessionId(sessionInfo)); |
428 | } | 454 | } |
429 | 455 | ||
430 | @Override | 456 | @Override |
431 | public boolean checkLimits(TransportProtos.SessionInfoProto sessionInfo, Object msg, TransportServiceCallback<Void> callback) { | 457 | public boolean checkLimits(TransportProtos.SessionInfoProto sessionInfo, Object msg, TransportServiceCallback<Void> callback) { |
432 | if (log.isTraceEnabled()) { | 458 | if (log.isTraceEnabled()) { |
433 | - log.trace("[{}] Processing msg: {}", toId(sessionInfo), msg); | 459 | + log.trace("[{}] Processing msg: {}", toSessionId(sessionInfo), msg); |
434 | } | 460 | } |
435 | if (!rateLimitEnabled) { | 461 | if (!rateLimitEnabled) { |
436 | return true; | 462 | return true; |
@@ -442,7 +468,7 @@ public class DefaultTransportService implements TransportService { | @@ -442,7 +468,7 @@ public class DefaultTransportService implements TransportService { | ||
442 | callback.onError(new TbRateLimitsException(EntityType.TENANT)); | 468 | callback.onError(new TbRateLimitsException(EntityType.TENANT)); |
443 | } | 469 | } |
444 | if (log.isTraceEnabled()) { | 470 | if (log.isTraceEnabled()) { |
445 | - log.trace("[{}][{}] Tenant level rate limit detected: {}", toId(sessionInfo), tenantId, msg); | 471 | + log.trace("[{}][{}] Tenant level rate limit detected: {}", toSessionId(sessionInfo), tenantId, msg); |
446 | } | 472 | } |
447 | return false; | 473 | return false; |
448 | } | 474 | } |
@@ -453,7 +479,7 @@ public class DefaultTransportService implements TransportService { | @@ -453,7 +479,7 @@ public class DefaultTransportService implements TransportService { | ||
453 | callback.onError(new TbRateLimitsException(EntityType.DEVICE)); | 479 | callback.onError(new TbRateLimitsException(EntityType.DEVICE)); |
454 | } | 480 | } |
455 | if (log.isTraceEnabled()) { | 481 | if (log.isTraceEnabled()) { |
456 | - log.trace("[{}][{}] Device level rate limit detected: {}", toId(sessionInfo), deviceId, msg); | 482 | + log.trace("[{}][{}] Device level rate limit detected: {}", toSessionId(sessionInfo), deviceId, msg); |
457 | } | 483 | } |
458 | return false; | 484 | return false; |
459 | } | 485 | } |
@@ -461,7 +487,7 @@ public class DefaultTransportService implements TransportService { | @@ -461,7 +487,7 @@ public class DefaultTransportService implements TransportService { | ||
461 | return true; | 487 | return true; |
462 | } | 488 | } |
463 | 489 | ||
464 | - protected void processToTransportMsg(TransportProtos.DeviceActorToTransportMsg toSessionMsg) { | 490 | + protected void processToTransportMsg(TransportProtos.ToTransportMsg toSessionMsg) { |
465 | UUID sessionId = new UUID(toSessionMsg.getSessionIdMSB(), toSessionMsg.getSessionIdLSB()); | 491 | UUID sessionId = new UUID(toSessionMsg.getSessionIdMSB(), toSessionMsg.getSessionIdLSB()); |
466 | SessionMetaData md = sessions.get(sessionId); | 492 | SessionMetaData md = sessions.get(sessionId); |
467 | if (md != null) { | 493 | if (md != null) { |
@@ -480,6 +506,8 @@ public class DefaultTransportService implements TransportService { | @@ -480,6 +506,8 @@ public class DefaultTransportService implements TransportService { | ||
480 | listener.onToDeviceRpcRequest(toSessionMsg.getToDeviceRequest()); | 506 | listener.onToDeviceRpcRequest(toSessionMsg.getToDeviceRequest()); |
481 | } | 507 | } |
482 | if (toSessionMsg.hasToServerResponse()) { | 508 | if (toSessionMsg.hasToServerResponse()) { |
509 | + String requestId = sessionId + "-" + toSessionMsg.getToServerResponse().getRequestId(); | ||
510 | + toServerRpcPendingMap.remove(requestId); | ||
483 | listener.onToServerRpcResponse(toSessionMsg.getToServerResponse()); | 511 | listener.onToServerRpcResponse(toSessionMsg.getToServerResponse()); |
484 | } | 512 | } |
485 | }); | 513 | }); |
@@ -492,7 +520,7 @@ public class DefaultTransportService implements TransportService { | @@ -492,7 +520,7 @@ public class DefaultTransportService implements TransportService { | ||
492 | } | 520 | } |
493 | } | 521 | } |
494 | 522 | ||
495 | - protected UUID toId(TransportProtos.SessionInfoProto sessionInfo) { | 523 | + protected UUID toSessionId(TransportProtos.SessionInfoProto sessionInfo) { |
496 | return new UUID(sessionInfo.getSessionIdMSB(), sessionInfo.getSessionIdLSB()); | 524 | return new UUID(sessionInfo.getSessionIdMSB(), sessionInfo.getSessionIdLSB()); |
497 | } | 525 | } |
498 | 526 |
common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/service/RpcRequestMetadata.java
renamed from
common/message/src/main/java/org/thingsboard/server/common/msg/core/ToServerRpcResponseMsg.java
@@ -13,20 +13,14 @@ | @@ -13,20 +13,14 @@ | ||
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.thingsboard.server.common.msg.core; | 16 | +package org.thingsboard.server.common.transport.service; |
17 | 17 | ||
18 | import lombok.Data; | 18 | import lombok.Data; |
19 | 19 | ||
20 | -/** | ||
21 | - * @author Andrew Shvayka | ||
22 | - */ | ||
23 | -@Data | ||
24 | -public class ToServerRpcResponseMsg { | 20 | +import java.util.UUID; |
25 | 21 | ||
22 | +@Data | ||
23 | +public class RpcRequestMetadata { | ||
24 | + private final UUID sessionId; | ||
26 | private final int requestId; | 25 | private final int requestId; |
27 | - private final String data; | ||
28 | - | ||
29 | - public boolean isSuccess() { | ||
30 | - return true; | ||
31 | - } | ||
32 | } | 26 | } |
@@ -16,6 +16,8 @@ | @@ -16,6 +16,8 @@ | ||
16 | package org.thingsboard.rule.engine.api; | 16 | package org.thingsboard.rule.engine.api; |
17 | 17 | ||
18 | import org.thingsboard.server.common.data.id.DeviceId; | 18 | import org.thingsboard.server.common.data.id.DeviceId; |
19 | + | ||
20 | +import java.util.UUID; | ||
19 | import java.util.function.Consumer; | 21 | import java.util.function.Consumer; |
20 | 22 | ||
21 | /** | 23 | /** |
@@ -23,7 +25,7 @@ import java.util.function.Consumer; | @@ -23,7 +25,7 @@ import java.util.function.Consumer; | ||
23 | */ | 25 | */ |
24 | public interface RuleEngineRpcService { | 26 | public interface RuleEngineRpcService { |
25 | 27 | ||
26 | - void sendRpcReplyToDevice(DeviceId deviceId, int requestId, String body); | 28 | + void sendRpcReplyToDevice(String serviceId, UUID sessionId, int requestId, String body); |
27 | 29 | ||
28 | void sendRpcRequestToDevice(RuleEngineDeviceRpcRequest request, Consumer<RuleEngineDeviceRpcResponse> consumer); | 30 | void sendRpcRequestToDevice(RuleEngineDeviceRpcRequest request, Consumer<RuleEngineDeviceRpcResponse> consumer); |
29 | 31 |
@@ -28,6 +28,8 @@ import org.thingsboard.server.common.data.id.DeviceId; | @@ -28,6 +28,8 @@ import org.thingsboard.server.common.data.id.DeviceId; | ||
28 | import org.thingsboard.server.common.data.plugin.ComponentType; | 28 | import org.thingsboard.server.common.data.plugin.ComponentType; |
29 | import org.thingsboard.server.common.msg.TbMsg; | 29 | import org.thingsboard.server.common.msg.TbMsg; |
30 | 30 | ||
31 | +import java.util.UUID; | ||
32 | + | ||
31 | @Slf4j | 33 | @Slf4j |
32 | @RuleNode( | 34 | @RuleNode( |
33 | type = ComponentType.ACTION, | 35 | type = ComponentType.ACTION, |
@@ -50,15 +52,21 @@ public class TbSendRPCReplyNode implements TbNode { | @@ -50,15 +52,21 @@ public class TbSendRPCReplyNode implements TbNode { | ||
50 | 52 | ||
51 | @Override | 53 | @Override |
52 | public void onMsg(TbContext ctx, TbMsg msg) { | 54 | public void onMsg(TbContext ctx, TbMsg msg) { |
55 | + String serviceIdStr = msg.getMetaData().getValue(config.getServiceIdMetaDataAttribute()); | ||
56 | + String sessionIdStr = msg.getMetaData().getValue(config.getSessionIdMetaDataAttribute()); | ||
53 | String requestIdStr = msg.getMetaData().getValue(config.getRequestIdMetaDataAttribute()); | 57 | String requestIdStr = msg.getMetaData().getValue(config.getRequestIdMetaDataAttribute()); |
54 | if (msg.getOriginator().getEntityType() != EntityType.DEVICE) { | 58 | if (msg.getOriginator().getEntityType() != EntityType.DEVICE) { |
55 | ctx.tellFailure(msg, new RuntimeException("Message originator is not a device entity!")); | 59 | ctx.tellFailure(msg, new RuntimeException("Message originator is not a device entity!")); |
56 | } else if (StringUtils.isEmpty(requestIdStr)) { | 60 | } else if (StringUtils.isEmpty(requestIdStr)) { |
57 | ctx.tellFailure(msg, new RuntimeException("Request id is not present in the metadata!")); | 61 | ctx.tellFailure(msg, new RuntimeException("Request id is not present in the metadata!")); |
62 | + } else if (StringUtils.isEmpty(serviceIdStr)) { | ||
63 | + ctx.tellFailure(msg, new RuntimeException("Service id is not present in the metadata!")); | ||
64 | + } else if (StringUtils.isEmpty(sessionIdStr)) { | ||
65 | + ctx.tellFailure(msg, new RuntimeException("Session id is not present in the metadata!")); | ||
58 | } else if (StringUtils.isEmpty(msg.getData())) { | 66 | } else if (StringUtils.isEmpty(msg.getData())) { |
59 | ctx.tellFailure(msg, new RuntimeException("Request body is empty!")); | 67 | ctx.tellFailure(msg, new RuntimeException("Request body is empty!")); |
60 | } else { | 68 | } else { |
61 | - ctx.getRpcService().sendRpcReplyToDevice(new DeviceId(msg.getOriginator().getId()), Integer.parseInt(requestIdStr), msg.getData()); | 69 | + ctx.getRpcService().sendRpcReplyToDevice(serviceIdStr, UUID.fromString(sessionIdStr), Integer.parseInt(requestIdStr), msg.getData()); |
62 | ctx.tellSuccess(msg); | 70 | ctx.tellSuccess(msg); |
63 | } | 71 | } |
64 | } | 72 | } |
@@ -16,18 +16,40 @@ | @@ -16,18 +16,40 @@ | ||
16 | package org.thingsboard.rule.engine.rpc; | 16 | package org.thingsboard.rule.engine.rpc; |
17 | 17 | ||
18 | import lombok.Data; | 18 | import lombok.Data; |
19 | +import org.springframework.util.StringUtils; | ||
19 | import org.thingsboard.rule.engine.api.NodeConfiguration; | 20 | import org.thingsboard.rule.engine.api.NodeConfiguration; |
20 | import org.thingsboard.server.common.data.DataConstants; | 21 | import org.thingsboard.server.common.data.DataConstants; |
21 | 22 | ||
22 | @Data | 23 | @Data |
23 | public class TbSendRpcReplyNodeConfiguration implements NodeConfiguration<TbSendRpcReplyNodeConfiguration> { | 24 | public class TbSendRpcReplyNodeConfiguration implements NodeConfiguration<TbSendRpcReplyNodeConfiguration> { |
24 | 25 | ||
26 | + public static final String SERVICE_ID = "serviceId"; | ||
27 | + public static final String SESSION_ID = "sessionId"; | ||
28 | + public static final String REQUEST_ID = "requestId"; | ||
29 | + | ||
30 | + private String serviceIdMetaDataAttribute; | ||
31 | + private String sessionIdMetaDataAttribute; | ||
25 | private String requestIdMetaDataAttribute; | 32 | private String requestIdMetaDataAttribute; |
26 | 33 | ||
27 | @Override | 34 | @Override |
28 | public TbSendRpcReplyNodeConfiguration defaultConfiguration() { | 35 | public TbSendRpcReplyNodeConfiguration defaultConfiguration() { |
29 | TbSendRpcReplyNodeConfiguration configuration = new TbSendRpcReplyNodeConfiguration(); | 36 | TbSendRpcReplyNodeConfiguration configuration = new TbSendRpcReplyNodeConfiguration(); |
30 | - configuration.setRequestIdMetaDataAttribute("requestId"); | 37 | + configuration.setServiceIdMetaDataAttribute(SERVICE_ID); |
38 | + configuration.setSessionIdMetaDataAttribute(SESSION_ID); | ||
39 | + configuration.setRequestIdMetaDataAttribute(REQUEST_ID); | ||
31 | return configuration; | 40 | return configuration; |
32 | } | 41 | } |
42 | + | ||
43 | + public String getServiceIdMetaDataAttribute() { | ||
44 | + return !StringUtils.isEmpty(serviceIdMetaDataAttribute) ? serviceIdMetaDataAttribute : SERVICE_ID; | ||
45 | + } | ||
46 | + | ||
47 | + public String getSessionIdMetaDataAttribute() { | ||
48 | + return !StringUtils.isEmpty(sessionIdMetaDataAttribute) ? sessionIdMetaDataAttribute : SESSION_ID; | ||
49 | + } | ||
50 | + | ||
51 | + public String getRequestIdMetaDataAttribute() { | ||
52 | + return !StringUtils.isEmpty(requestIdMetaDataAttribute) ? requestIdMetaDataAttribute : REQUEST_ID; | ||
53 | + } | ||
33 | } | 54 | } |
55 | + |
@@ -81,15 +81,15 @@ queue: | @@ -81,15 +81,15 @@ queue: | ||
81 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" | 81 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" |
82 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" | 82 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" |
83 | transport_api: | 83 | transport_api: |
84 | - requests_topic: "${TB_QUEUE_TRANSPORT_API_REQUEST_TOPIC:tb.transport.api.requests}" | ||
85 | - responses_topic: "${TB_QUEUE_TRANSPORT_API_RESPONSE_TOPIC:tb.transport.api.responses}" | 84 | + requests_topic: "${TB_QUEUE_TRANSPORT_API_REQUEST_TOPIC:tb_transport.api.requests}" |
85 | + responses_topic: "${TB_QUEUE_TRANSPORT_API_RESPONSE_TOPIC:tb_transport.api.responses}" | ||
86 | max_pending_requests: "${TB_QUEUE_TRANSPORT_MAX_PENDING_REQUESTS:10000}" | 86 | max_pending_requests: "${TB_QUEUE_TRANSPORT_MAX_PENDING_REQUESTS:10000}" |
87 | max_requests_timeout: "${TB_QUEUE_TRANSPORT_MAX_REQUEST_TIMEOUT:10000}" | 87 | max_requests_timeout: "${TB_QUEUE_TRANSPORT_MAX_REQUEST_TIMEOUT:10000}" |
88 | max_callback_threads: "${TB_QUEUE_TRANSPORT_MAX_CALLBACK_THREADS:100}" | 88 | max_callback_threads: "${TB_QUEUE_TRANSPORT_MAX_CALLBACK_THREADS:100}" |
89 | request_poll_interval: "${TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS:25}" | 89 | request_poll_interval: "${TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS:25}" |
90 | response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" | 90 | response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" |
91 | core: | 91 | core: |
92 | - topic: "${TB_QUEUE_CORE_TOPIC:tb.core}" | 92 | + topic: "${TB_QUEUE_CORE_TOPIC:tb_core}" |
93 | poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" | 93 | poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" |
94 | partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" | 94 | partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" |
95 | pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" | 95 | pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -98,9 +98,9 @@ queue: | @@ -98,9 +98,9 @@ queue: | ||
98 | print-interval-ms: "${TB_QUEUE_CORE_STATS_PRINT_INTERVAL_MS:10000}" | 98 | print-interval-ms: "${TB_QUEUE_CORE_STATS_PRINT_INTERVAL_MS:10000}" |
99 | js: | 99 | js: |
100 | # JS Eval request topic | 100 | # JS Eval request topic |
101 | - request_topic: "${REMOTE_JS_EVAL_REQUEST_TOPIC:js.eval.requests}" | 101 | + request_topic: "${REMOTE_JS_EVAL_REQUEST_TOPIC:js_eval.requests}" |
102 | # JS Eval responses topic prefix that is combined with node id | 102 | # JS Eval responses topic prefix that is combined with node id |
103 | - response_topic_prefix: "${REMOTE_JS_EVAL_RESPONSE_TOPIC:js.eval.responses}" | 103 | + response_topic_prefix: "${REMOTE_JS_EVAL_RESPONSE_TOPIC:js_eval.responses}" |
104 | # JS Eval max pending requests | 104 | # JS Eval max pending requests |
105 | max_pending_requests: "${REMOTE_JS_MAX_PENDING_REQUESTS:10000}" | 105 | max_pending_requests: "${REMOTE_JS_MAX_PENDING_REQUESTS:10000}" |
106 | # JS Eval max request timeout | 106 | # JS Eval max request timeout |
@@ -110,7 +110,7 @@ queue: | @@ -110,7 +110,7 @@ queue: | ||
110 | # JS response auto commit interval | 110 | # JS response auto commit interval |
111 | response_auto_commit_interval: "${REMOTE_JS_RESPONSE_AUTO_COMMIT_INTERVAL_MS:100}" | 111 | response_auto_commit_interval: "${REMOTE_JS_RESPONSE_AUTO_COMMIT_INTERVAL_MS:100}" |
112 | rule-engine: | 112 | rule-engine: |
113 | - topic: "${TB_QUEUE_RULE_ENGINE_TOPIC:tb.rule-engine}" | 113 | + topic: "${TB_QUEUE_RULE_ENGINE_TOPIC:tb_rule_engine}" |
114 | poll-interval: "${TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS:25}" | 114 | poll-interval: "${TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS:25}" |
115 | pack-processing-timeout: "${TB_QUEUE_RULE_ENGINE_PACK_PROCESSING_TIMEOUT_MS:60000}" | 115 | pack-processing-timeout: "${TB_QUEUE_RULE_ENGINE_PACK_PROCESSING_TIMEOUT_MS:60000}" |
116 | stats: | 116 | stats: |
@@ -118,7 +118,7 @@ queue: | @@ -118,7 +118,7 @@ queue: | ||
118 | print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:10000}" | 118 | print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:10000}" |
119 | queues: | 119 | queues: |
120 | - name: "Main" | 120 | - name: "Main" |
121 | - topic: "${TB_QUEUE_RE_MAIN_TOPIC:tb.rule-engine.main}" | 121 | + topic: "${TB_QUEUE_RE_MAIN_TOPIC:tb_rule_engine.main}" |
122 | poll-interval: "${TB_QUEUE_RE_MAIN_POLL_INTERVAL_MS:25}" | 122 | poll-interval: "${TB_QUEUE_RE_MAIN_POLL_INTERVAL_MS:25}" |
123 | partitions: "${TB_QUEUE_RE_MAIN_PARTITIONS:10}" | 123 | partitions: "${TB_QUEUE_RE_MAIN_PARTITIONS:10}" |
124 | pack-processing-timeout: "${TB_QUEUE_RE_MAIN_PACK_PROCESSING_TIMEOUT_MS:60000}" | 124 | pack-processing-timeout: "${TB_QUEUE_RE_MAIN_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -133,7 +133,7 @@ queue: | @@ -133,7 +133,7 @@ queue: | ||
133 | failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages; | 133 | failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages; |
134 | pause-between-retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRY_PAUSE:3}"# Time in seconds to wait in consumer thread before retries; | 134 | pause-between-retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRY_PAUSE:3}"# Time in seconds to wait in consumer thread before retries; |
135 | - name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}" | 135 | - name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}" |
136 | - topic: "${TB_QUEUE_RE_HP_TOPIC:tb.rule-engine.hp}" | 136 | + topic: "${TB_QUEUE_RE_HP_TOPIC:tb_rule_engine.hp}" |
137 | poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}" | 137 | poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}" |
138 | partitions: "${TB_QUEUE_RE_HP_PARTITIONS:3}" | 138 | partitions: "${TB_QUEUE_RE_HP_PARTITIONS:3}" |
139 | pack-processing-timeout: "${TB_QUEUE_RE_HP_PACK_PROCESSING_TIMEOUT_MS:60000}" | 139 | pack-processing-timeout: "${TB_QUEUE_RE_HP_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -149,7 +149,7 @@ queue: | @@ -149,7 +149,7 @@ queue: | ||
149 | pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries; | 149 | pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries; |
150 | transport: | 150 | transport: |
151 | # For high priority notifications that require minimum latency and processing time | 151 | # For high priority notifications that require minimum latency and processing time |
152 | - notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb.transport.notifications}" | 152 | + notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb_transport.notifications}" |
153 | poll_interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" | 153 | poll_interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" |
154 | 154 | ||
155 | service: | 155 | service: |
@@ -82,15 +82,15 @@ queue: | @@ -82,15 +82,15 @@ queue: | ||
82 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" | 82 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" |
83 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" | 83 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" |
84 | transport_api: | 84 | transport_api: |
85 | - requests_topic: "${TB_QUEUE_TRANSPORT_API_REQUEST_TOPIC:tb.transport.api.requests}" | ||
86 | - responses_topic: "${TB_QUEUE_TRANSPORT_API_RESPONSE_TOPIC:tb.transport.api.responses}" | 85 | + requests_topic: "${TB_QUEUE_TRANSPORT_API_REQUEST_TOPIC:tb_transport.api.requests}" |
86 | + responses_topic: "${TB_QUEUE_TRANSPORT_API_RESPONSE_TOPIC:tb_transport.api.responses}" | ||
87 | max_pending_requests: "${TB_QUEUE_TRANSPORT_MAX_PENDING_REQUESTS:10000}" | 87 | max_pending_requests: "${TB_QUEUE_TRANSPORT_MAX_PENDING_REQUESTS:10000}" |
88 | max_requests_timeout: "${TB_QUEUE_TRANSPORT_MAX_REQUEST_TIMEOUT:10000}" | 88 | max_requests_timeout: "${TB_QUEUE_TRANSPORT_MAX_REQUEST_TIMEOUT:10000}" |
89 | max_callback_threads: "${TB_QUEUE_TRANSPORT_MAX_CALLBACK_THREADS:100}" | 89 | max_callback_threads: "${TB_QUEUE_TRANSPORT_MAX_CALLBACK_THREADS:100}" |
90 | request_poll_interval: "${TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS:25}" | 90 | request_poll_interval: "${TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS:25}" |
91 | response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" | 91 | response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" |
92 | core: | 92 | core: |
93 | - topic: "${TB_QUEUE_CORE_TOPIC:tb.core}" | 93 | + topic: "${TB_QUEUE_CORE_TOPIC:tb_core}" |
94 | poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" | 94 | poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" |
95 | partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" | 95 | partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" |
96 | pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" | 96 | pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -99,9 +99,9 @@ queue: | @@ -99,9 +99,9 @@ queue: | ||
99 | print-interval-ms: "${TB_QUEUE_CORE_STATS_PRINT_INTERVAL_MS:10000}" | 99 | print-interval-ms: "${TB_QUEUE_CORE_STATS_PRINT_INTERVAL_MS:10000}" |
100 | js: | 100 | js: |
101 | # JS Eval request topic | 101 | # JS Eval request topic |
102 | - request_topic: "${REMOTE_JS_EVAL_REQUEST_TOPIC:js.eval.requests}" | 102 | + request_topic: "${REMOTE_JS_EVAL_REQUEST_TOPIC:js_eval.requests}" |
103 | # JS Eval responses topic prefix that is combined with node id | 103 | # JS Eval responses topic prefix that is combined with node id |
104 | - response_topic_prefix: "${REMOTE_JS_EVAL_RESPONSE_TOPIC:js.eval.responses}" | 104 | + response_topic_prefix: "${REMOTE_JS_EVAL_RESPONSE_TOPIC:js_eval.responses}" |
105 | # JS Eval max pending requests | 105 | # JS Eval max pending requests |
106 | max_pending_requests: "${REMOTE_JS_MAX_PENDING_REQUESTS:10000}" | 106 | max_pending_requests: "${REMOTE_JS_MAX_PENDING_REQUESTS:10000}" |
107 | # JS Eval max request timeout | 107 | # JS Eval max request timeout |
@@ -111,7 +111,7 @@ queue: | @@ -111,7 +111,7 @@ queue: | ||
111 | # JS response auto commit interval | 111 | # JS response auto commit interval |
112 | response_auto_commit_interval: "${REMOTE_JS_RESPONSE_AUTO_COMMIT_INTERVAL_MS:100}" | 112 | response_auto_commit_interval: "${REMOTE_JS_RESPONSE_AUTO_COMMIT_INTERVAL_MS:100}" |
113 | rule-engine: | 113 | rule-engine: |
114 | - topic: "${TB_QUEUE_RULE_ENGINE_TOPIC:tb.rule-engine}" | 114 | + topic: "${TB_QUEUE_RULE_ENGINE_TOPIC:tb_rule_engine}" |
115 | poll-interval: "${TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS:25}" | 115 | poll-interval: "${TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS:25}" |
116 | pack-processing-timeout: "${TB_QUEUE_RULE_ENGINE_PACK_PROCESSING_TIMEOUT_MS:60000}" | 116 | pack-processing-timeout: "${TB_QUEUE_RULE_ENGINE_PACK_PROCESSING_TIMEOUT_MS:60000}" |
117 | stats: | 117 | stats: |
@@ -119,7 +119,7 @@ queue: | @@ -119,7 +119,7 @@ queue: | ||
119 | print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:10000}" | 119 | print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:10000}" |
120 | queues: | 120 | queues: |
121 | - name: "Main" | 121 | - name: "Main" |
122 | - topic: "${TB_QUEUE_RE_MAIN_TOPIC:tb.rule-engine.main}" | 122 | + topic: "${TB_QUEUE_RE_MAIN_TOPIC:tb_rule_engine.main}" |
123 | poll-interval: "${TB_QUEUE_RE_MAIN_POLL_INTERVAL_MS:25}" | 123 | poll-interval: "${TB_QUEUE_RE_MAIN_POLL_INTERVAL_MS:25}" |
124 | partitions: "${TB_QUEUE_RE_MAIN_PARTITIONS:10}" | 124 | partitions: "${TB_QUEUE_RE_MAIN_PARTITIONS:10}" |
125 | pack-processing-timeout: "${TB_QUEUE_RE_MAIN_PACK_PROCESSING_TIMEOUT_MS:60000}" | 125 | pack-processing-timeout: "${TB_QUEUE_RE_MAIN_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -134,7 +134,7 @@ queue: | @@ -134,7 +134,7 @@ queue: | ||
134 | failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages; | 134 | failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages; |
135 | pause-between-retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRY_PAUSE:3}"# Time in seconds to wait in consumer thread before retries; | 135 | pause-between-retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRY_PAUSE:3}"# Time in seconds to wait in consumer thread before retries; |
136 | - name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}" | 136 | - name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}" |
137 | - topic: "${TB_QUEUE_RE_HP_TOPIC:tb.rule-engine.hp}" | 137 | + topic: "${TB_QUEUE_RE_HP_TOPIC:tb_rule_engine.hp}" |
138 | poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}" | 138 | poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}" |
139 | partitions: "${TB_QUEUE_RE_HP_PARTITIONS:3}" | 139 | partitions: "${TB_QUEUE_RE_HP_PARTITIONS:3}" |
140 | pack-processing-timeout: "${TB_QUEUE_RE_HP_PACK_PROCESSING_TIMEOUT_MS:60000}" | 140 | pack-processing-timeout: "${TB_QUEUE_RE_HP_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -150,7 +150,7 @@ queue: | @@ -150,7 +150,7 @@ queue: | ||
150 | pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries; | 150 | pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries; |
151 | transport: | 151 | transport: |
152 | # For high priority notifications that require minimum latency and processing time | 152 | # For high priority notifications that require minimum latency and processing time |
153 | - notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb.transport.notifications}" | 153 | + notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb_transport.notifications}" |
154 | poll_interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" | 154 | poll_interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" |
155 | 155 | ||
156 | service: | 156 | service: |
@@ -17,10 +17,20 @@ | @@ -17,10 +17,20 @@ | ||
17 | spring.main.web-environment: false | 17 | spring.main.web-environment: false |
18 | spring.main.web-application-type: none | 18 | spring.main.web-application-type: none |
19 | 19 | ||
20 | -# Clustering properties | ||
21 | -cluster: | ||
22 | - # Unique id for this node (autogenerated if empty) | ||
23 | - node_id: "${CLUSTER_NODE_ID:}" | 20 | +# Zookeeper connection parameters. Used for service discovery. |
21 | +zk: | ||
22 | + # Enable/disable zookeeper discovery service. | ||
23 | + enabled: "${ZOOKEEPER_ENABLED:false}" | ||
24 | + # Zookeeper connect string | ||
25 | + url: "${ZOOKEEPER_URL:localhost:2181}" | ||
26 | + # Zookeeper retry interval in milliseconds | ||
27 | + retry_interval_ms: "${ZOOKEEPER_RETRY_INTERVAL_MS:3000}" | ||
28 | + # Zookeeper connection timeout in milliseconds | ||
29 | + connection_timeout_ms: "${ZOOKEEPER_CONNECTION_TIMEOUT_MS:3000}" | ||
30 | + # Zookeeper session timeout in milliseconds | ||
31 | + session_timeout_ms: "${ZOOKEEPER_SESSION_TIMEOUT_MS:3000}" | ||
32 | + # Name of the directory in zookeeper 'filesystem' | ||
33 | + zk_dir: "${ZOOKEEPER_NODES_DIR:/thingsboard}" | ||
24 | 34 | ||
25 | # MQTT server parameters | 35 | # MQTT server parameters |
26 | transport: | 36 | transport: |
@@ -102,15 +112,15 @@ queue: | @@ -102,15 +112,15 @@ queue: | ||
102 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" | 112 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" |
103 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" | 113 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" |
104 | transport_api: | 114 | transport_api: |
105 | - requests_topic: "${TB_QUEUE_TRANSPORT_API_REQUEST_TOPIC:tb.transport.api.requests}" | ||
106 | - responses_topic: "${TB_QUEUE_TRANSPORT_API_RESPONSE_TOPIC:tb.transport.api.responses}" | 115 | + requests_topic: "${TB_QUEUE_TRANSPORT_API_REQUEST_TOPIC:tb_transport.api.requests}" |
116 | + responses_topic: "${TB_QUEUE_TRANSPORT_API_RESPONSE_TOPIC:tb_transport.api.responses}" | ||
107 | max_pending_requests: "${TB_QUEUE_TRANSPORT_MAX_PENDING_REQUESTS:10000}" | 117 | max_pending_requests: "${TB_QUEUE_TRANSPORT_MAX_PENDING_REQUESTS:10000}" |
108 | max_requests_timeout: "${TB_QUEUE_TRANSPORT_MAX_REQUEST_TIMEOUT:10000}" | 118 | max_requests_timeout: "${TB_QUEUE_TRANSPORT_MAX_REQUEST_TIMEOUT:10000}" |
109 | max_callback_threads: "${TB_QUEUE_TRANSPORT_MAX_CALLBACK_THREADS:100}" | 119 | max_callback_threads: "${TB_QUEUE_TRANSPORT_MAX_CALLBACK_THREADS:100}" |
110 | request_poll_interval: "${TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS:25}" | 120 | request_poll_interval: "${TB_QUEUE_TRANSPORT_REQUEST_POLL_INTERVAL_MS:25}" |
111 | response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" | 121 | response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" |
112 | core: | 122 | core: |
113 | - topic: "${TB_QUEUE_CORE_TOPIC:tb.core}" | 123 | + topic: "${TB_QUEUE_CORE_TOPIC:tb_core}" |
114 | poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" | 124 | poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" |
115 | partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" | 125 | partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" |
116 | pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" | 126 | pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -119,9 +129,9 @@ queue: | @@ -119,9 +129,9 @@ queue: | ||
119 | print-interval-ms: "${TB_QUEUE_CORE_STATS_PRINT_INTERVAL_MS:10000}" | 129 | print-interval-ms: "${TB_QUEUE_CORE_STATS_PRINT_INTERVAL_MS:10000}" |
120 | js: | 130 | js: |
121 | # JS Eval request topic | 131 | # JS Eval request topic |
122 | - request_topic: "${REMOTE_JS_EVAL_REQUEST_TOPIC:js.eval.requests}" | 132 | + request_topic: "${REMOTE_JS_EVAL_REQUEST_TOPIC:js_eval.requests}" |
123 | # JS Eval responses topic prefix that is combined with node id | 133 | # JS Eval responses topic prefix that is combined with node id |
124 | - response_topic_prefix: "${REMOTE_JS_EVAL_RESPONSE_TOPIC:js.eval.responses}" | 134 | + response_topic_prefix: "${REMOTE_JS_EVAL_RESPONSE_TOPIC:js_eval.responses}" |
125 | # JS Eval max pending requests | 135 | # JS Eval max pending requests |
126 | max_pending_requests: "${REMOTE_JS_MAX_PENDING_REQUESTS:10000}" | 136 | max_pending_requests: "${REMOTE_JS_MAX_PENDING_REQUESTS:10000}" |
127 | # JS Eval max request timeout | 137 | # JS Eval max request timeout |
@@ -131,7 +141,7 @@ queue: | @@ -131,7 +141,7 @@ queue: | ||
131 | # JS response auto commit interval | 141 | # JS response auto commit interval |
132 | response_auto_commit_interval: "${REMOTE_JS_RESPONSE_AUTO_COMMIT_INTERVAL_MS:100}" | 142 | response_auto_commit_interval: "${REMOTE_JS_RESPONSE_AUTO_COMMIT_INTERVAL_MS:100}" |
133 | rule-engine: | 143 | rule-engine: |
134 | - topic: "${TB_QUEUE_RULE_ENGINE_TOPIC:tb.rule-engine}" | 144 | + topic: "${TB_QUEUE_RULE_ENGINE_TOPIC:tb_rule_engine}" |
135 | poll-interval: "${TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS:25}" | 145 | poll-interval: "${TB_QUEUE_RULE_ENGINE_POLL_INTERVAL_MS:25}" |
136 | pack-processing-timeout: "${TB_QUEUE_RULE_ENGINE_PACK_PROCESSING_TIMEOUT_MS:60000}" | 146 | pack-processing-timeout: "${TB_QUEUE_RULE_ENGINE_PACK_PROCESSING_TIMEOUT_MS:60000}" |
137 | stats: | 147 | stats: |
@@ -139,7 +149,7 @@ queue: | @@ -139,7 +149,7 @@ queue: | ||
139 | print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:10000}" | 149 | print-interval-ms: "${TB_QUEUE_RULE_ENGINE_STATS_PRINT_INTERVAL_MS:10000}" |
140 | queues: | 150 | queues: |
141 | - name: "Main" | 151 | - name: "Main" |
142 | - topic: "${TB_QUEUE_RE_MAIN_TOPIC:tb.rule-engine.main}" | 152 | + topic: "${TB_QUEUE_RE_MAIN_TOPIC:tb_rule_engine.main}" |
143 | poll-interval: "${TB_QUEUE_RE_MAIN_POLL_INTERVAL_MS:25}" | 153 | poll-interval: "${TB_QUEUE_RE_MAIN_POLL_INTERVAL_MS:25}" |
144 | partitions: "${TB_QUEUE_RE_MAIN_PARTITIONS:10}" | 154 | partitions: "${TB_QUEUE_RE_MAIN_PARTITIONS:10}" |
145 | pack-processing-timeout: "${TB_QUEUE_RE_MAIN_PACK_PROCESSING_TIMEOUT_MS:60000}" | 155 | pack-processing-timeout: "${TB_QUEUE_RE_MAIN_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -154,7 +164,7 @@ queue: | @@ -154,7 +164,7 @@ queue: | ||
154 | failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages; | 164 | failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages; |
155 | pause-between-retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRY_PAUSE:3}"# Time in seconds to wait in consumer thread before retries; | 165 | pause-between-retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRY_PAUSE:3}"# Time in seconds to wait in consumer thread before retries; |
156 | - name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}" | 166 | - name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}" |
157 | - topic: "${TB_QUEUE_RE_HP_TOPIC:tb.rule-engine.hp}" | 167 | + topic: "${TB_QUEUE_RE_HP_TOPIC:tb_rule_engine.hp}" |
158 | poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}" | 168 | poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}" |
159 | partitions: "${TB_QUEUE_RE_HP_PARTITIONS:3}" | 169 | partitions: "${TB_QUEUE_RE_HP_PARTITIONS:3}" |
160 | pack-processing-timeout: "${TB_QUEUE_RE_HP_PACK_PROCESSING_TIMEOUT_MS:60000}" | 170 | pack-processing-timeout: "${TB_QUEUE_RE_HP_PACK_PROCESSING_TIMEOUT_MS:60000}" |
@@ -170,7 +180,7 @@ queue: | @@ -170,7 +180,7 @@ queue: | ||
170 | pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries; | 180 | pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries; |
171 | transport: | 181 | transport: |
172 | # For high priority notifications that require minimum latency and processing time | 182 | # For high priority notifications that require minimum latency and processing time |
173 | - notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb.transport.notifications}" | 183 | + notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb_transport.notifications}" |
174 | poll_interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" | 184 | poll_interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" |
175 | 185 | ||
176 | service: | 186 | service: |