|
|
@ -19,9 +19,12 @@ import lombok.extern.slf4j.Slf4j; |
|
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
|
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
|
|
import org.springframework.stereotype.Component; |
|
|
import org.springframework.stereotype.Component; |
|
|
import org.thingsboard.server.TbQueueConsumer; |
|
|
import org.thingsboard.server.TbQueueConsumer; |
|
|
|
|
|
import org.thingsboard.server.TbQueueCoreSettings; |
|
|
import org.thingsboard.server.TbQueueProducer; |
|
|
import org.thingsboard.server.TbQueueProducer; |
|
|
import org.thingsboard.server.TbQueueRequestTemplate; |
|
|
import org.thingsboard.server.TbQueueRequestTemplate; |
|
|
|
|
|
import org.thingsboard.server.TbQueueRuleEngineSettings; |
|
|
import org.thingsboard.server.TbQueueTransportApiSettings; |
|
|
import org.thingsboard.server.TbQueueTransportApiSettings; |
|
|
|
|
|
import org.thingsboard.server.TbQueueTransportNotificationSettings; |
|
|
import org.thingsboard.server.common.DefaultTbQueueRequestTemplate; |
|
|
import org.thingsboard.server.common.DefaultTbQueueRequestTemplate; |
|
|
import org.thingsboard.server.common.TbProtoQueueMsg; |
|
|
import org.thingsboard.server.common.TbProtoQueueMsg; |
|
|
import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
|
|
import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
|
|
@ -29,6 +32,7 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
|
|
import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
|
|
import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
|
|
import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; |
|
|
import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; |
|
|
import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
|
|
import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
|
|
|
|
|
import org.thingsboard.server.kafka.TBKafkaAdmin; |
|
|
import org.thingsboard.server.kafka.TBKafkaConsumerTemplate; |
|
|
import org.thingsboard.server.kafka.TBKafkaConsumerTemplate; |
|
|
import org.thingsboard.server.kafka.TBKafkaProducerTemplate; |
|
|
import org.thingsboard.server.kafka.TBKafkaProducerTemplate; |
|
|
import org.thingsboard.server.kafka.TbKafkaSettings; |
|
|
import org.thingsboard.server.kafka.TbKafkaSettings; |
|
|
@ -41,31 +45,42 @@ public class KafkaTransportQueueProvider implements TransportQueueProvider { |
|
|
|
|
|
|
|
|
private final TbKafkaSettings kafkaSettings; |
|
|
private final TbKafkaSettings kafkaSettings; |
|
|
private final TbNodeIdProvider nodeIdProvider; |
|
|
private final TbNodeIdProvider nodeIdProvider; |
|
|
|
|
|
private final TbQueueCoreSettings coreSettings; |
|
|
|
|
|
private final TbQueueRuleEngineSettings ruleEngineSettings; |
|
|
private final TbQueueTransportApiSettings transportApiSettings; |
|
|
private final TbQueueTransportApiSettings transportApiSettings; |
|
|
|
|
|
private final TbQueueTransportNotificationSettings transportNotificationSettings; |
|
|
|
|
|
|
|
|
public KafkaTransportQueueProvider(TbKafkaSettings kafkaSettings, TbNodeIdProvider nodeIdProvider, TbQueueTransportApiSettings transportApiSettings) { |
|
|
public KafkaTransportQueueProvider(TbKafkaSettings kafkaSettings, |
|
|
|
|
|
TbNodeIdProvider nodeIdProvider, |
|
|
|
|
|
TbQueueCoreSettings coreSettings, |
|
|
|
|
|
TbQueueRuleEngineSettings ruleEngineSettings, |
|
|
|
|
|
TbQueueTransportApiSettings transportApiSettings, |
|
|
|
|
|
TbQueueTransportNotificationSettings transportNotificationSettings) { |
|
|
this.kafkaSettings = kafkaSettings; |
|
|
this.kafkaSettings = kafkaSettings; |
|
|
this.nodeIdProvider = nodeIdProvider; |
|
|
this.nodeIdProvider = nodeIdProvider; |
|
|
|
|
|
this.coreSettings = coreSettings; |
|
|
|
|
|
this.ruleEngineSettings = ruleEngineSettings; |
|
|
this.transportApiSettings = transportApiSettings; |
|
|
this.transportApiSettings = transportApiSettings; |
|
|
|
|
|
this.transportNotificationSettings = transportNotificationSettings; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public TbQueueRequestTemplate<TbProtoQueueMsg<TransportApiRequestMsg>, TbProtoQueueMsg<TransportApiResponseMsg>> getTransportApiRequestTemplate() { |
|
|
public TbQueueRequestTemplate<TbProtoQueueMsg<TransportApiRequestMsg>, TbProtoQueueMsg<TransportApiResponseMsg>> getTransportApiRequestTemplate() { |
|
|
TBKafkaProducerTemplate.TBKafkaProducerTemplateBuilder<TbProtoQueueMsg<TransportApiRequestMsg>> requestBuilder = TBKafkaProducerTemplate.builder(); |
|
|
TBKafkaProducerTemplate.TBKafkaProducerTemplateBuilder<TbProtoQueueMsg<TransportApiRequestMsg>> requestBuilder = TBKafkaProducerTemplate.builder(); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.clientId("producer-transport-" + nodeIdProvider.getNodeId()); |
|
|
requestBuilder.clientId("producer-transport-api-" + nodeIdProvider.getNodeId()); |
|
|
requestBuilder.defaultTopic(transportApiSettings.getRequestsTopic()); |
|
|
requestBuilder.defaultTopic(transportApiSettings.getRequestsTopic()); |
|
|
|
|
|
|
|
|
TBKafkaConsumerTemplate.TBKafkaConsumerTemplateBuilder<TbProtoQueueMsg<TransportApiResponseMsg>> responseBuilder = TBKafkaConsumerTemplate.builder(); |
|
|
TBKafkaConsumerTemplate.TBKafkaConsumerTemplateBuilder<TbProtoQueueMsg<TransportApiResponseMsg>> responseBuilder = TBKafkaConsumerTemplate.builder(); |
|
|
responseBuilder.settings(kafkaSettings); |
|
|
responseBuilder.settings(kafkaSettings); |
|
|
responseBuilder.topic(transportApiSettings.getResponsesTopic()); |
|
|
responseBuilder.topic(transportApiSettings.getResponsesTopic() + "." + nodeIdProvider.getNodeId()); |
|
|
responseBuilder.clientId("consumer-transport-" + nodeIdProvider.getNodeId()); |
|
|
responseBuilder.clientId("consumer-transport-api-" + nodeIdProvider.getNodeId()); |
|
|
responseBuilder.groupId("rule-engine-node-" + nodeIdProvider.getNodeId()); |
|
|
responseBuilder.groupId("transport-node-" + nodeIdProvider.getNodeId()); |
|
|
responseBuilder.autoCommit(true); |
|
|
|
|
|
responseBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
responseBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
|
|
|
|
|
|
DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder |
|
|
DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder |
|
|
<TbProtoQueueMsg<TransportApiRequestMsg>, TbProtoQueueMsg<TransportApiResponseMsg>> templateBuilder = DefaultTbQueueRequestTemplate.builder(); |
|
|
<TbProtoQueueMsg<TransportApiRequestMsg>, TbProtoQueueMsg<TransportApiResponseMsg>> templateBuilder = DefaultTbQueueRequestTemplate.builder(); |
|
|
|
|
|
templateBuilder.queueAdmin(new TBKafkaAdmin(kafkaSettings)); |
|
|
templateBuilder.requestTemplate(requestBuilder.build()); |
|
|
templateBuilder.requestTemplate(requestBuilder.build()); |
|
|
templateBuilder.responseTemplate(responseBuilder.build()); |
|
|
templateBuilder.responseTemplate(responseBuilder.build()); |
|
|
templateBuilder.maxPendingRequests(transportApiSettings.getMaxPendingRequests()); |
|
|
templateBuilder.maxPendingRequests(transportApiSettings.getMaxPendingRequests()); |
|
|
@ -78,7 +93,7 @@ public class KafkaTransportQueueProvider implements TransportQueueProvider { |
|
|
public TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> getRuleEngineMsgProducer() { |
|
|
public TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> getRuleEngineMsgProducer() { |
|
|
TBKafkaProducerTemplate.TBKafkaProducerTemplateBuilder<TbProtoQueueMsg<ToRuleEngineMsg>> requestBuilder = TBKafkaProducerTemplate.builder(); |
|
|
TBKafkaProducerTemplate.TBKafkaProducerTemplateBuilder<TbProtoQueueMsg<ToRuleEngineMsg>> requestBuilder = TBKafkaProducerTemplate.builder(); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.clientId("producer-transport-" + nodeIdProvider.getNodeId()); |
|
|
requestBuilder.clientId("producer-rule-engine-" + nodeIdProvider.getNodeId()); |
|
|
requestBuilder.defaultTopic(transportApiSettings.getRequestsTopic()); |
|
|
requestBuilder.defaultTopic(transportApiSettings.getRequestsTopic()); |
|
|
return requestBuilder.build(); |
|
|
return requestBuilder.build(); |
|
|
} |
|
|
} |
|
|
@ -87,13 +102,19 @@ public class KafkaTransportQueueProvider implements TransportQueueProvider { |
|
|
public TbQueueProducer<TbProtoQueueMsg<ToCoreMsg>> getTbCoreMsgProducer() { |
|
|
public TbQueueProducer<TbProtoQueueMsg<ToCoreMsg>> getTbCoreMsgProducer() { |
|
|
TBKafkaProducerTemplate.TBKafkaProducerTemplateBuilder<TbProtoQueueMsg<ToCoreMsg>> requestBuilder = TBKafkaProducerTemplate.builder(); |
|
|
TBKafkaProducerTemplate.TBKafkaProducerTemplateBuilder<TbProtoQueueMsg<ToCoreMsg>> requestBuilder = TBKafkaProducerTemplate.builder(); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.clientId("producer-transport-" + nodeIdProvider.getNodeId()); |
|
|
requestBuilder.clientId("producer-tb-core-" + nodeIdProvider.getNodeId()); |
|
|
requestBuilder.defaultTopic(transportApiSettings.getRequestsTopic()); |
|
|
requestBuilder.defaultTopic(transportApiSettings.getRequestsTopic()); |
|
|
return requestBuilder.build(); |
|
|
return requestBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public TbQueueConsumer<TbProtoQueueMsg<ToTransportMsg>> getTransportNotificationsConsumer() { |
|
|
public TbQueueConsumer<TbProtoQueueMsg<ToTransportMsg>> getTransportNotificationsConsumer() { |
|
|
return null; |
|
|
TBKafkaConsumerTemplate.TBKafkaConsumerTemplateBuilder<TbProtoQueueMsg<ToTransportMsg>> responseBuilder = TBKafkaConsumerTemplate.builder(); |
|
|
|
|
|
responseBuilder.settings(kafkaSettings); |
|
|
|
|
|
responseBuilder.topic(transportNotificationSettings.getNotificationsTopic() + "." + nodeIdProvider.getNodeId()); |
|
|
|
|
|
responseBuilder.clientId("consumer-transport-" + nodeIdProvider.getNodeId()); |
|
|
|
|
|
responseBuilder.groupId("rule-engine-node-" + nodeIdProvider.getNodeId()); |
|
|
|
|
|
responseBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
|
|
|
return responseBuilder.build(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|