|
|
@ -28,6 +28,7 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotifica |
|
|
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.queue.TbQueueAdmin; |
|
|
import org.thingsboard.server.queue.TbQueueConsumer; |
|
|
import org.thingsboard.server.queue.TbQueueConsumer; |
|
|
import org.thingsboard.server.queue.TbQueueProducer; |
|
|
import org.thingsboard.server.queue.TbQueueProducer; |
|
|
import org.thingsboard.server.queue.TbQueueRequestTemplate; |
|
|
import org.thingsboard.server.queue.TbQueueRequestTemplate; |
|
|
@ -40,6 +41,7 @@ import org.thingsboard.server.queue.kafka.TBKafkaAdmin; |
|
|
import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; |
|
|
import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; |
|
|
import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; |
|
|
import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; |
|
|
import org.thingsboard.server.queue.kafka.TbKafkaSettings; |
|
|
import org.thingsboard.server.queue.kafka.TbKafkaSettings; |
|
|
|
|
|
import org.thingsboard.server.queue.kafka.TbKafkaTopicConfigs; |
|
|
import org.thingsboard.server.queue.settings.TbQueueCoreSettings; |
|
|
import org.thingsboard.server.queue.settings.TbQueueCoreSettings; |
|
|
import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; |
|
|
import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; |
|
|
import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; |
|
|
import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; |
|
|
@ -62,13 +64,20 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
private final TbQueueTransportNotificationSettings transportNotificationSettings; |
|
|
private final TbQueueTransportNotificationSettings transportNotificationSettings; |
|
|
private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; |
|
|
private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; |
|
|
|
|
|
|
|
|
|
|
|
private final TbQueueAdmin coreAdmin; |
|
|
|
|
|
private final TbQueueAdmin ruleEngineAdmin; |
|
|
|
|
|
private final TbQueueAdmin jsExecutorAdmin; |
|
|
|
|
|
private final TbQueueAdmin transportApiAdmin; |
|
|
|
|
|
private final TbQueueAdmin notificationAdmin; |
|
|
|
|
|
|
|
|
public KafkaMonolithQueueFactory(PartitionService partitionService, TbKafkaSettings kafkaSettings, |
|
|
public KafkaMonolithQueueFactory(PartitionService partitionService, TbKafkaSettings kafkaSettings, |
|
|
TbServiceInfoProvider serviceInfoProvider, |
|
|
TbServiceInfoProvider serviceInfoProvider, |
|
|
TbQueueCoreSettings coreSettings, |
|
|
TbQueueCoreSettings coreSettings, |
|
|
TbQueueRuleEngineSettings ruleEngineSettings, |
|
|
TbQueueRuleEngineSettings ruleEngineSettings, |
|
|
TbQueueTransportApiSettings transportApiSettings, |
|
|
TbQueueTransportApiSettings transportApiSettings, |
|
|
TbQueueTransportNotificationSettings transportNotificationSettings, |
|
|
TbQueueTransportNotificationSettings transportNotificationSettings, |
|
|
TbQueueRemoteJsInvokeSettings jsInvokeSettings) { |
|
|
TbQueueRemoteJsInvokeSettings jsInvokeSettings, |
|
|
|
|
|
TbKafkaTopicConfigs kafkaTopicConfigs) { |
|
|
this.partitionService = partitionService; |
|
|
this.partitionService = partitionService; |
|
|
this.kafkaSettings = kafkaSettings; |
|
|
this.kafkaSettings = kafkaSettings; |
|
|
this.serviceInfoProvider = serviceInfoProvider; |
|
|
this.serviceInfoProvider = serviceInfoProvider; |
|
|
@ -77,6 +86,12 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
this.transportApiSettings = transportApiSettings; |
|
|
this.transportApiSettings = transportApiSettings; |
|
|
this.transportNotificationSettings = transportNotificationSettings; |
|
|
this.transportNotificationSettings = transportNotificationSettings; |
|
|
this.jsInvokeSettings = jsInvokeSettings; |
|
|
this.jsInvokeSettings = jsInvokeSettings; |
|
|
|
|
|
|
|
|
|
|
|
this.coreAdmin = new TBKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getCoreConfigs()); |
|
|
|
|
|
this.ruleEngineAdmin = new TBKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getRuleEngineConfigs()); |
|
|
|
|
|
this.jsExecutorAdmin = new TBKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getJsExecutorConfigs()); |
|
|
|
|
|
this.transportApiAdmin = new TBKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getTransportApiConfigs()); |
|
|
|
|
|
this.notificationAdmin = new TBKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getNotificationsConfigs()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
@ -85,6 +100,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.clientId("monolith-transport-notifications-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.clientId("monolith-transport-notifications-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.defaultTopic(transportNotificationSettings.getNotificationsTopic()); |
|
|
requestBuilder.defaultTopic(transportNotificationSettings.getNotificationsTopic()); |
|
|
|
|
|
requestBuilder.admin(notificationAdmin); |
|
|
return requestBuilder.build(); |
|
|
return requestBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -94,6 +110,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.clientId("monolith-rule-engine-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.clientId("monolith-rule-engine-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.defaultTopic(ruleEngineSettings.getTopic()); |
|
|
requestBuilder.defaultTopic(ruleEngineSettings.getTopic()); |
|
|
|
|
|
requestBuilder.admin(ruleEngineAdmin); |
|
|
return requestBuilder.build(); |
|
|
return requestBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -103,6 +120,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.clientId("monolith-rule-engine-notifications-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.clientId("monolith-rule-engine-notifications-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.defaultTopic(ruleEngineSettings.getTopic()); |
|
|
requestBuilder.defaultTopic(ruleEngineSettings.getTopic()); |
|
|
|
|
|
requestBuilder.admin(ruleEngineAdmin); |
|
|
return requestBuilder.build(); |
|
|
return requestBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -112,6 +130,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.clientId("monolith-core-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.clientId("monolith-core-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.defaultTopic(coreSettings.getTopic()); |
|
|
requestBuilder.defaultTopic(coreSettings.getTopic()); |
|
|
|
|
|
requestBuilder.admin(coreAdmin); |
|
|
return requestBuilder.build(); |
|
|
return requestBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -121,6 +140,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.clientId("monolith-core-notifications-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.clientId("monolith-core-notifications-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.defaultTopic(coreSettings.getTopic()); |
|
|
requestBuilder.defaultTopic(coreSettings.getTopic()); |
|
|
|
|
|
requestBuilder.admin(coreAdmin); |
|
|
return requestBuilder.build(); |
|
|
return requestBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -133,6 +153,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
consumerBuilder.clientId("re-" + queueName + "-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.clientId("re-" + queueName + "-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.groupId("re-" + queueName + "-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.groupId("re-" + queueName + "-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
|
|
|
consumerBuilder.admin(ruleEngineAdmin); |
|
|
return consumerBuilder.build(); |
|
|
return consumerBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -144,6 +165,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
consumerBuilder.clientId("monolith-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.clientId("monolith-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.groupId("monolith-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.groupId("monolith-rule-engine-notifications-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
|
|
|
consumerBuilder.admin(notificationAdmin); |
|
|
return consumerBuilder.build(); |
|
|
return consumerBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -155,6 +177,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
consumerBuilder.clientId("monolith-core-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.clientId("monolith-core-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.groupId("monolith-core-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.groupId("monolith-core-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
|
|
|
consumerBuilder.admin(coreAdmin); |
|
|
return consumerBuilder.build(); |
|
|
return consumerBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -166,6 +189,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
consumerBuilder.clientId("monolith-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.clientId("monolith-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.groupId("monolith-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.groupId("monolith-core-notifications-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
|
|
|
consumerBuilder.admin(notificationAdmin); |
|
|
return consumerBuilder.build(); |
|
|
return consumerBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -177,6 +201,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
consumerBuilder.clientId("monolith-transport-api-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.clientId("monolith-transport-api-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.groupId("monolith-transport-api-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.groupId("monolith-transport-api-consumer-" + serviceInfoProvider.getServiceId()); |
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); |
|
|
|
|
|
consumerBuilder.admin(transportApiAdmin); |
|
|
return consumerBuilder.build(); |
|
|
return consumerBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -186,6 +211,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.clientId("monolith-transport-api-producer-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.clientId("monolith-transport-api-producer-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.defaultTopic(transportApiSettings.getResponsesTopic()); |
|
|
requestBuilder.defaultTopic(transportApiSettings.getResponsesTopic()); |
|
|
|
|
|
requestBuilder.admin(transportApiAdmin); |
|
|
return requestBuilder.build(); |
|
|
return requestBuilder.build(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -196,24 +222,24 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.settings(kafkaSettings); |
|
|
requestBuilder.clientId("producer-js-invoke-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.clientId("producer-js-invoke-" + serviceInfoProvider.getServiceId()); |
|
|
requestBuilder.defaultTopic(jsInvokeSettings.getRequestTopic()); |
|
|
requestBuilder.defaultTopic(jsInvokeSettings.getRequestTopic()); |
|
|
|
|
|
requestBuilder.admin(jsExecutorAdmin); |
|
|
|
|
|
|
|
|
TBKafkaConsumerTemplate.TBKafkaConsumerTemplateBuilder<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> responseBuilder = TBKafkaConsumerTemplate.builder(); |
|
|
TBKafkaConsumerTemplate.TBKafkaConsumerTemplateBuilder<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> responseBuilder = TBKafkaConsumerTemplate.builder(); |
|
|
responseBuilder.settings(kafkaSettings); |
|
|
responseBuilder.settings(kafkaSettings); |
|
|
responseBuilder.topic(jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId()); |
|
|
responseBuilder.topic(jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId()); |
|
|
responseBuilder.clientId("js-" + serviceInfoProvider.getServiceId()); |
|
|
responseBuilder.clientId("js-" + serviceInfoProvider.getServiceId()); |
|
|
responseBuilder.groupId("rule-engine-node-" + serviceInfoProvider.getServiceId()); |
|
|
responseBuilder.groupId("rule-engine-node-" + serviceInfoProvider.getServiceId()); |
|
|
// responseBuilder.autoCommit(true);
|
|
|
|
|
|
// responseBuilder.autoCommitIntervalMs(autoCommitInterval);
|
|
|
|
|
|
responseBuilder.decoder(msg -> { |
|
|
responseBuilder.decoder(msg -> { |
|
|
JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); |
|
|
JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); |
|
|
JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); |
|
|
JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); |
|
|
return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); |
|
|
return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); |
|
|
} |
|
|
} |
|
|
); |
|
|
); |
|
|
|
|
|
responseBuilder.admin(jsExecutorAdmin); |
|
|
|
|
|
|
|
|
DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder |
|
|
DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder |
|
|
<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> builder = DefaultTbQueueRequestTemplate.builder(); |
|
|
<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> builder = DefaultTbQueueRequestTemplate.builder(); |
|
|
builder.queueAdmin(new TBKafkaAdmin(kafkaSettings)); |
|
|
builder.queueAdmin(jsExecutorAdmin); |
|
|
builder.requestTemplate(requestBuilder.build()); |
|
|
builder.requestTemplate(requestBuilder.build()); |
|
|
builder.responseTemplate(responseBuilder.build()); |
|
|
builder.responseTemplate(responseBuilder.build()); |
|
|
builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); |
|
|
builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); |
|
|
|