|
|
|
@ -25,6 +25,9 @@ import org.thingsboard.server.common.data.id.TenantId; |
|
|
|
import org.thingsboard.server.common.data.queue.Queue; |
|
|
|
import org.thingsboard.server.common.msg.queue.ServiceType; |
|
|
|
import org.thingsboard.server.gen.js.JsInvokeProtos; |
|
|
|
import org.thingsboard.server.gen.transport.TransportProtos.CalculatedFieldStateProto; |
|
|
|
import org.thingsboard.server.gen.transport.TransportProtos.ToCalculatedFieldMsg; |
|
|
|
import org.thingsboard.server.gen.transport.TransportProtos.ToCalculatedFieldNotificationMsg; |
|
|
|
import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
|
|
|
import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
|
|
|
import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeEventNotificationMsg; |
|
|
|
@ -54,6 +57,7 @@ import org.thingsboard.server.queue.kafka.TbKafkaConsumerTemplate; |
|
|
|
import org.thingsboard.server.queue.kafka.TbKafkaProducerTemplate; |
|
|
|
import org.thingsboard.server.queue.kafka.TbKafkaSettings; |
|
|
|
import org.thingsboard.server.queue.kafka.TbKafkaTopicConfigs; |
|
|
|
import org.thingsboard.server.queue.settings.TbQueueCalculatedFieldSettings; |
|
|
|
import org.thingsboard.server.queue.settings.TbQueueCoreSettings; |
|
|
|
import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; |
|
|
|
import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; |
|
|
|
@ -79,6 +83,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
|
private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; |
|
|
|
private final TbQueueVersionControlSettings vcSettings; |
|
|
|
private final TbQueueEdgeSettings edgeSettings; |
|
|
|
private final TbQueueCalculatedFieldSettings calculatedFieldSettings; |
|
|
|
private final TbKafkaConsumerStatsService consumerStatsService; |
|
|
|
|
|
|
|
private final TbQueueAdmin coreAdmin; |
|
|
|
@ -94,6 +99,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
|
private final TbQueueAdmin housekeeperReprocessingAdmin; |
|
|
|
private final TbQueueAdmin edgeAdmin; |
|
|
|
private final TbQueueAdmin edgeEventAdmin; |
|
|
|
private final TbQueueAdmin cfAdmin; |
|
|
|
|
|
|
|
private final AtomicLong consumerCount = new AtomicLong(); |
|
|
|
|
|
|
|
@ -106,6 +112,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
|
TbQueueRemoteJsInvokeSettings jsInvokeSettings, |
|
|
|
TbQueueVersionControlSettings vcSettings, |
|
|
|
TbQueueEdgeSettings edgeSettings, |
|
|
|
TbQueueCalculatedFieldSettings calculatedFieldSettings, |
|
|
|
TbKafkaConsumerStatsService consumerStatsService, |
|
|
|
TbKafkaTopicConfigs kafkaTopicConfigs) { |
|
|
|
this.topicService = topicService; |
|
|
|
@ -119,6 +126,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
|
this.vcSettings = vcSettings; |
|
|
|
this.consumerStatsService = consumerStatsService; |
|
|
|
this.edgeSettings = edgeSettings; |
|
|
|
this.calculatedFieldSettings = calculatedFieldSettings; |
|
|
|
|
|
|
|
this.coreAdmin = new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getCoreConfigs()); |
|
|
|
this.ruleEngineAdmin = new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getRuleEngineConfigs()); |
|
|
|
@ -133,6 +141,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
|
this.housekeeperReprocessingAdmin = new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getHousekeeperReprocessingConfigs()); |
|
|
|
this.edgeAdmin = new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getEdgeConfigs()); |
|
|
|
this.edgeEventAdmin = new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getEdgeEventConfigs()); |
|
|
|
this.cfAdmin = new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getCalculatedFieldConfigs()); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@ -490,6 +499,75 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
|
return requestBuilder.build(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public TbQueueConsumer<TbProtoQueueMsg<ToCalculatedFieldMsg>> createToCalculatedFieldMsgConsumer() { |
|
|
|
TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder<TbProtoQueueMsg<ToCalculatedFieldMsg>> consumerBuilder = TbKafkaConsumerTemplate.builder(); |
|
|
|
consumerBuilder.settings(kafkaSettings); |
|
|
|
consumerBuilder.topic(topicService.buildTopicName(calculatedFieldSettings.getEventTopic())); |
|
|
|
consumerBuilder.clientId("monolith-calculated-field-consumer-" + serviceInfoProvider.getServiceId() + "-" + consumerCount.incrementAndGet()); |
|
|
|
consumerBuilder.groupId(topicService.buildTopicName("monolith-calculated-field-consumer")); |
|
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCalculatedFieldMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
|
consumerBuilder.admin(cfAdmin); |
|
|
|
consumerBuilder.statsService(consumerStatsService); |
|
|
|
return consumerBuilder.build(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public TbQueueProducer<TbProtoQueueMsg<ToCalculatedFieldMsg>> createToCalculatedFieldMsgProducer() { |
|
|
|
TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder<TbProtoQueueMsg<ToCalculatedFieldMsg>> requestBuilder = TbKafkaProducerTemplate.builder(); |
|
|
|
requestBuilder.settings(kafkaSettings); |
|
|
|
requestBuilder.clientId("monolith-calculated-field-" + serviceInfoProvider.getServiceId()); |
|
|
|
requestBuilder.defaultTopic(topicService.buildTopicName(calculatedFieldSettings.getEventTopic())); |
|
|
|
requestBuilder.admin(cfAdmin); |
|
|
|
return requestBuilder.build(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public TbQueueConsumer<TbProtoQueueMsg<ToCalculatedFieldNotificationMsg>> createToCalculatedFieldNotificationsMsgConsumer() { |
|
|
|
TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder<TbProtoQueueMsg<ToCalculatedFieldNotificationMsg>> consumerBuilder = TbKafkaConsumerTemplate.builder(); |
|
|
|
consumerBuilder.settings(kafkaSettings); |
|
|
|
consumerBuilder.topic(topicService.getCalculatedFieldNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); |
|
|
|
consumerBuilder.clientId("monolith-calculated-field-notifications-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
|
consumerBuilder.groupId(topicService.buildTopicName("monolith-calculated-field-notifications-consumer-" + serviceInfoProvider.getServiceId())); |
|
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCalculatedFieldNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
|
consumerBuilder.admin(notificationAdmin); |
|
|
|
consumerBuilder.statsService(consumerStatsService); |
|
|
|
return consumerBuilder.build(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public TbQueueProducer<TbProtoQueueMsg<ToCalculatedFieldNotificationMsg>> createToCalculatedFieldNotificationMsgProducer() { |
|
|
|
TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder<TbProtoQueueMsg<ToCalculatedFieldNotificationMsg>> requestBuilder = TbKafkaProducerTemplate.builder(); |
|
|
|
requestBuilder.settings(kafkaSettings); |
|
|
|
requestBuilder.clientId("monolith-calculated-field-notifications-" + serviceInfoProvider.getServiceId()); |
|
|
|
requestBuilder.defaultTopic(topicService.buildTopicName(calculatedFieldSettings.getEventTopic())); |
|
|
|
requestBuilder.admin(notificationAdmin); |
|
|
|
return requestBuilder.build(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public TbQueueConsumer<TbProtoQueueMsg<CalculatedFieldStateProto>> createCalculatedFieldStateConsumer() { |
|
|
|
TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder<TbProtoQueueMsg<CalculatedFieldStateProto>> consumerBuilder = TbKafkaConsumerTemplate.builder(); |
|
|
|
consumerBuilder.settings(kafkaSettings); |
|
|
|
consumerBuilder.topic(topicService.buildTopicName(calculatedFieldSettings.getStateTopic())); |
|
|
|
consumerBuilder.clientId("monolith-calculated-field-state-consumer-" + serviceInfoProvider.getServiceId() + "-" + consumerCount.incrementAndGet()); |
|
|
|
consumerBuilder.groupId(topicService.buildTopicName("monolith-calculated-field-state-consumer")); |
|
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), CalculatedFieldStateProto.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
|
consumerBuilder.admin(cfAdmin); |
|
|
|
consumerBuilder.statsService(consumerStatsService); |
|
|
|
return consumerBuilder.build(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public TbQueueProducer<TbProtoQueueMsg<CalculatedFieldStateProto>> createCalculatedFieldStateProducer() { |
|
|
|
TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder<TbProtoQueueMsg<CalculatedFieldStateProto>> requestBuilder = TbKafkaProducerTemplate.builder(); |
|
|
|
requestBuilder.settings(kafkaSettings); |
|
|
|
requestBuilder.clientId("monolith-calculated-field-state-" + serviceInfoProvider.getServiceId()); |
|
|
|
requestBuilder.defaultTopic(topicService.buildTopicName(calculatedFieldSettings.getStateTopic())); |
|
|
|
requestBuilder.admin(cfAdmin); |
|
|
|
return requestBuilder.build(); |
|
|
|
} |
|
|
|
|
|
|
|
@PreDestroy |
|
|
|
private void destroy() { |
|
|
|
if (coreAdmin != null) { |
|
|
|
@ -522,5 +600,8 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
|
if (edgeAdmin != null) { |
|
|
|
edgeAdmin.destroy(); |
|
|
|
} |
|
|
|
if (cfAdmin != null) { |
|
|
|
cfAdmin.destroy(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|