diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml
index 066c1468fb..f29cc55197 100644
--- a/application/src/main/resources/thingsboard.yml
+++ b/application/src/main/resources/thingsboard.yml
@@ -1493,9 +1493,7 @@ swagger:
# Queue configuration parameters
queue:
- # in-memory or kafka (Apache Kafka). The following queue types are deprecated and will no longer be supported in ThingsBoard 4.0:
- # aws-sqs (AWS SQS), pubsub (PubSub), service-bus (Azure Service Bus), rabbitmq (RabbitMQ)
- type: "${TB_QUEUE_TYPE:in-memory}"
+ type: "${TB_QUEUE_TYPE:in-memory}" # in-memory or kafka (Apache Kafka)
prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka).
in_memory:
stats:
@@ -1624,122 +1622,6 @@ queue:
print-interval-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_MIN_PRINT_INTERVAL_MS:60000}"
# Time to wait for the stats-loading requests to Kafka to finish
kafka-response-timeout-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_RESPONSE_TIMEOUT_MS:1000}"
- aws_sqs:
- # Use the default credentials provider for AWS SQS
- use_default_credential_provider_chain: "${TB_QUEUE_AWS_SQS_USE_DEFAULT_CREDENTIAL_PROVIDER_CHAIN:false}"
- # Access key ID from AWS IAM user
- access_key_id: "${TB_QUEUE_AWS_SQS_ACCESS_KEY_ID:YOUR_KEY}"
- # Secret access key from AWS IAM user
- secret_access_key: "${TB_QUEUE_AWS_SQS_SECRET_ACCESS_KEY:YOUR_SECRET}"
- # Region from AWS account
- region: "${TB_QUEUE_AWS_SQS_REGION:YOUR_REGION}"
- # Number of threads per each AWS SQS queue in consumer
- threads_per_topic: "${TB_QUEUE_AWS_SQS_THREADS_PER_TOPIC:1}"
- # Thread pool size for aws_sqs queue producer executor provider. Default value equals to AmazonSQSAsyncClient.DEFAULT_THREAD_POOL_SIZE
- producer_thread_pool_size: "${TB_QUEUE_AWS_SQS_EXECUTOR_THREAD_POOL_SIZE:50}"
- queue-properties:
- # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds
- rule-engine: "${TB_QUEUE_AWS_SQS_RE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}"
- # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds
- core: "${TB_QUEUE_AWS_SQS_CORE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}"
- # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds
- transport-api: "${TB_QUEUE_AWS_SQS_TA_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}"
- # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds
- notifications: "${TB_QUEUE_AWS_SQS_NOTIFICATIONS_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}"
- # VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800
- js-executor: "${TB_QUEUE_AWS_SQS_JE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}"
- # VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds
- ota-updates: "${TB_QUEUE_AWS_SQS_OTA_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}"
- # VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds
- version-control: "${TB_QUEUE_AWS_SQS_VC_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}"
- # VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds
- edge: "${TB_QUEUE_AWS_SQS_EDGE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}"
- pubsub:
- # Project ID from Google Cloud
- project_id: "${TB_QUEUE_PUBSUB_PROJECT_ID:YOUR_PROJECT_ID}"
- # API Credentials in JSON format
- service_account: "${TB_QUEUE_PUBSUB_SERVICE_ACCOUNT:YOUR_SERVICE_ACCOUNT}"
- # Message size for PubSub queue.Value in bytes
- max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}"
- # Number of messages per consumer
- max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}"
- # Thread pool size for pubsub queue executor provider. If set to 0 - default pubsub executor provider value will be used (5 * number of available processors)
- executor_thread_pool_size: "${TB_QUEUE_PUBSUB_EXECUTOR_THREAD_POOL_SIZE:0}"
- queue-properties:
- # Pub/Sub properties for Rule Engine subscribers, messages which will commit after ackDeadlineInSec period can be consumed again
- rule-engine: "${TB_QUEUE_PUBSUB_RE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}"
- # Pub/Sub properties for Core subscribers, messages which will commit after ackDeadlineInSec period can be consumed again
- core: "${TB_QUEUE_PUBSUB_CORE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}"
- # Pub/Sub properties for Transport API subscribers, messages which will commit after ackDeadlineInSec period can be consumed again
- transport-api: "${TB_QUEUE_PUBSUB_TA_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}"
- # Pub/Sub properties for Version Control subscribers, messages which will commit after ackDeadlineInSec period can be consumed again
- notifications: "${TB_QUEUE_PUBSUB_NOTIFICATIONS_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}"
- # PubSub queue properties
- js-executor: "${TB_QUEUE_PUBSUB_JE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}"
- # Pub/Sub properties for Transport Api subscribers, messages which will commit after ackDeadlineInSec period can be consumed again
- version-control: "${TB_QUEUE_PUBSUB_VC_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}"
- # Pub/Sub properties for Edge subscribers, messages which will commit after ackDeadlineInSec period can be consumed again
- edge: "${TB_QUEUE_PUBSUB_EDGE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}"
- service_bus:
- # Azure namespace
- namespace_name: "${TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME:YOUR_NAMESPACE_NAME}"
- # Azure Service Bus Shared Access Signatures key name
- sas_key_name: "${TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME:YOUR_SAS_KEY_NAME}"
- # Azure Service Bus Shared Access Signatures key
- sas_key: "${TB_QUEUE_SERVICE_BUS_SAS_KEY:YOUR_SAS_KEY}"
- # Number of messages per a consumer
- max_messages: "${TB_QUEUE_SERVICE_BUS_MAX_MESSAGES:1000}"
- queue-properties:
- # Azure Service Bus properties for Rule Engine queues
- rule-engine: "${TB_QUEUE_SERVICE_BUS_RE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}"
- # Azure Service Bus properties for Core queues
- core: "${TB_QUEUE_SERVICE_BUS_CORE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}"
- # Azure Service Bus properties for Transport Api queues
- transport-api: "${TB_QUEUE_SERVICE_BUS_TA_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}"
- # Azure Service Bus properties for Notification queues
- notifications: "${TB_QUEUE_SERVICE_BUS_NOTIFICATIONS_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}"
- # Azure Service Bus queue properties
- js-executor: "${TB_QUEUE_SERVICE_BUS_JE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}"
- # Azure Service Bus properties for Version Control queues
- version-control: "${TB_QUEUE_SERVICE_BUS_VC_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}"
- # Azure Service Bus properties for Edge queues
- edge: "${TB_QUEUE_SERVICE_BUS_EDGE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}"
- rabbitmq:
- # By default empty
- exchange_name: "${TB_QUEUE_RABBIT_MQ_EXCHANGE_NAME:}"
- # RabbitMQ host used to establish connection
- host: "${TB_QUEUE_RABBIT_MQ_HOST:localhost}"
- # RabbitMQ host used to establish a connection
- port: "${TB_QUEUE_RABBIT_MQ_PORT:5672}"
- # Virtual hosts provide logical grouping and separation of resources
- virtual_host: "${TB_QUEUE_RABBIT_MQ_VIRTUAL_HOST:/}"
- # Username for RabbitMQ user account
- username: "${TB_QUEUE_RABBIT_MQ_USERNAME:YOUR_USERNAME}"
- # User password for RabbitMQ user account
- password: "${TB_QUEUE_RABBIT_MQ_PASSWORD:YOUR_PASSWORD}"
- # Network connection between clients and RabbitMQ nodes can fail. RabbitMQ Java client supports automatic recovery of connections and topology (queues, exchanges, bindings, and consumers)
- automatic_recovery_enabled: "${TB_QUEUE_RABBIT_MQ_AUTOMATIC_RECOVERY_ENABLED:false}"
- # The connection timeout for the RabbitMQ connection factory
- connection_timeout: "${TB_QUEUE_RABBIT_MQ_CONNECTION_TIMEOUT:60000}"
- # RabbitMQ has a timeout for connection handshake. When clients run in heavily constrained environments, it may be necessary to increase the timeout
- handshake_timeout: "${TB_QUEUE_RABBIT_MQ_HANDSHAKE_TIMEOUT:10000}"
- # The maximum number of messages returned in a single call of doPoll() method
- max_poll_messages: "${TB_QUEUE_RABBIT_MQ_MAX_POLL_MESSAGES:1}"
- queue-properties:
- # RabbitMQ properties for Rule Engine queues
- rule-engine: "${TB_QUEUE_RABBIT_MQ_RE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}"
- # RabbitMQ properties for Core queues
- core: "${TB_QUEUE_RABBIT_MQ_CORE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}"
- # RabbitMQ properties for Transport API queues
- transport-api: "${TB_QUEUE_RABBIT_MQ_TA_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}"
- # RabbitMQ properties for Notification queues
- notifications: "${TB_QUEUE_RABBIT_MQ_NOTIFICATIONS_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}"
- # RabbitMQ queue properties
- js-executor: "${TB_QUEUE_RABBIT_MQ_JE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}"
- # RabbitMQ properties for Version Control queues
- version-control: "${TB_QUEUE_RABBIT_MQ_VC_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}"
- # RabbitMQ properties for Edge queues
- edge: "${TB_QUEUE_RABBIT_MQ_EDGE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}"
partitions:
hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256
transport_api:
@@ -1760,7 +1642,7 @@ queue:
# Interval in milliseconds to poll api response from transport microservices
response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}"
core:
- # Default topic name of Kafka, RabbitMQ, etc. queue
+ # Default topic name
topic: "${TB_QUEUE_CORE_TOPIC:tb_core}"
# Interval in milliseconds to poll messages by Core microservices
poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}"
@@ -1777,7 +1659,7 @@ queue:
pack-interval-ms: "${TB_QUEUE_CORE_OTA_PACK_INTERVAL_MS:60000}"
# The size of OTA updates notifications fetched from the queue. The queue stores pairs of firmware and device ids
pack-size: "${TB_QUEUE_CORE_OTA_PACK_SIZE:100}"
- # Stats topic name for queue Kafka, RabbitMQ, etc.
+ # Stats topic name
usage-stats-topic: "${TB_QUEUE_US_TOPIC:tb_usage_stats}"
stats:
# Enable/disable statistics for Core microservices
@@ -1808,7 +1690,7 @@ queue:
print-interval-ms: "${TB_HOUSEKEEPER_STATS_PRINT_INTERVAL_MS:60000}"
vc:
- # Default topic name for Kafka, RabbitMQ, etc.
+ # Default topic name
topic: "${TB_QUEUE_VC_TOPIC:tb_version_control}"
# Number of partitions to associate with this queue. Used for scaling the number of messages that can be processed in parallel
partitions: "${TB_QUEUE_VC_PARTITIONS:10}"
@@ -1818,7 +1700,7 @@ queue:
pack-processing-timeout: "${TB_QUEUE_VC_PACK_PROCESSING_TIMEOUT_MS:180000}"
# Timeout for a request to VC-executor (for a request for the version of the entity, for a commit charge, etc.)
request-timeout: "${TB_QUEUE_VC_REQUEST_TIMEOUT:180000}"
- # Queue settings for Kafka, RabbitMQ, etc. Limit for single message size
+ # Limit for single queue message size
msg-chunk-size: "${TB_QUEUE_VC_MSG_CHUNK_SIZE:250000}"
js:
# JS Eval request topic
@@ -1859,7 +1741,7 @@ queue:
# Interval in milliseconds to poll messages
poll_interval: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_POLL_INTERVAL_MS:25}"
edge:
- # Default topic name for Kafka, RabbitMQ, etc.
+ # Default topic name
topic: "${TB_QUEUE_EDGE_TOPIC:tb_edge}"
# Amount of partitions used by Edge services
partitions: "${TB_QUEUE_EDGE_PARTITIONS:10}"
diff --git a/common/queue/pom.xml b/common/queue/pom.xml
index 6fad5efd5a..44e2239e05 100644
--- a/common/queue/pom.xml
+++ b/common/queue/pom.xml
@@ -64,18 +64,10 @@
org.apache.kafka
kafka-clients
-
- com.amazonaws
- aws-java-sdk-sqs
-
com.google.cloud
google-cloud-pubsub
-
- com.microsoft.azure
- azure-servicebus
-
com.rabbitmq
amqp-client
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/RuleEngineTbQueueAdminFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/RuleEngineTbQueueAdminFactory.java
index 87ad934c63..057351a449 100644
--- a/common/queue/src/main/java/org/thingsboard/server/queue/RuleEngineTbQueueAdminFactory.java
+++ b/common/queue/src/main/java/org/thingsboard/server/queue/RuleEngineTbQueueAdminFactory.java
@@ -19,21 +19,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.thingsboard.server.queue.azure.servicebus.TbServiceBusAdmin;
-import org.thingsboard.server.queue.azure.servicebus.TbServiceBusQueueConfigs;
-import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings;
import org.thingsboard.server.queue.kafka.TbKafkaAdmin;
import org.thingsboard.server.queue.kafka.TbKafkaSettings;
import org.thingsboard.server.queue.kafka.TbKafkaTopicConfigs;
-import org.thingsboard.server.queue.pubsub.TbPubSubAdmin;
-import org.thingsboard.server.queue.pubsub.TbPubSubSettings;
-import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqQueueArguments;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqSettings;
-import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin;
-import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes;
-import org.thingsboard.server.queue.sqs.TbAwsSqsSettings;
@Configuration
public class RuleEngineTbQueueAdminFactory {
@@ -43,56 +31,12 @@ public class RuleEngineTbQueueAdminFactory {
@Autowired(required = false)
private TbKafkaSettings kafkaSettings;
- @Autowired(required = false)
- private TbAwsSqsQueueAttributes awsSqsQueueAttributes;
- @Autowired(required = false)
- private TbAwsSqsSettings awsSqsSettings;
-
- @Autowired(required = false)
- private TbPubSubSubscriptionSettings pubSubSubscriptionSettings;
- @Autowired(required = false)
- private TbPubSubSettings pubSubSettings;
-
- @Autowired(required = false)
- private TbRabbitMqQueueArguments rabbitMqQueueArguments;
- @Autowired(required = false)
- private TbRabbitMqSettings rabbitMqSettings;
-
- @Autowired(required = false)
- private TbServiceBusQueueConfigs serviceBusQueueConfigs;
- @Autowired(required = false)
- private TbServiceBusSettings serviceBusSettings;
-
@ConditionalOnExpression("'${queue.type:null}'=='kafka'")
@Bean
public TbQueueAdmin createKafkaAdmin() {
return new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getRuleEngineConfigs());
}
- @ConditionalOnExpression("'${queue.type:null}'=='aws-sqs'")
- @Bean
- public TbQueueAdmin createAwsSqsAdmin() {
- return new TbAwsSqsAdmin(awsSqsSettings, awsSqsQueueAttributes.getRuleEngineAttributes());
- }
-
- @ConditionalOnExpression("'${queue.type:null}'=='pubsub'")
- @Bean
- public TbQueueAdmin createPubSubAdmin() {
- return new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getRuleEngineSettings());
- }
-
- @ConditionalOnExpression("'${queue.type:null}'=='rabbitmq'")
- @Bean
- public TbQueueAdmin createRabbitMqAdmin() {
- return new TbRabbitMqAdmin(rabbitMqSettings, rabbitMqQueueArguments.getRuleEngineArgs());
- }
-
- @ConditionalOnExpression("'${queue.type:null}'=='service-bus'")
- @Bean
- public TbQueueAdmin createServiceBusAdmin() {
- return new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getRuleEngineConfigs());
- }
-
@ConditionalOnExpression("'${queue.type:null}'=='in-memory'")
@Bean
public TbQueueAdmin createInMemoryAdmin() {
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusAdmin.java b/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusAdmin.java
deleted file mode 100644
index 3f920778e6..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusAdmin.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.azure.servicebus;
-
-import com.microsoft.azure.servicebus.management.ManagementClient;
-import com.microsoft.azure.servicebus.management.QueueDescription;
-import com.microsoft.azure.servicebus.primitives.ConnectionStringBuilder;
-import com.microsoft.azure.servicebus.primitives.MessagingEntityAlreadyExistsException;
-import com.microsoft.azure.servicebus.primitives.ServiceBusException;
-import lombok.extern.slf4j.Slf4j;
-import org.thingsboard.server.queue.TbQueueAdmin;
-import org.thingsboard.server.queue.util.PropertyUtils;
-
-import java.io.IOException;
-import java.time.Duration;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-@Slf4j
-@Deprecated(forRemoval = true, since = "3.9") // for removal in 4.0
-public class TbServiceBusAdmin implements TbQueueAdmin {
- private final String MAX_SIZE = "maxSizeInMb";
- private final String MESSAGE_TIME_TO_LIVE = "messageTimeToLiveInSec";
- private final String LOCK_DURATION = "lockDurationInSec";
-
- private final Map queueConfigs;
- private final Set queues = ConcurrentHashMap.newKeySet();
-
- private final ManagementClient client;
-
- public TbServiceBusAdmin(TbServiceBusSettings serviceBusSettings, Map queueConfigs) {
- this.queueConfigs = queueConfigs;
-
- ConnectionStringBuilder builder = new ConnectionStringBuilder(
- serviceBusSettings.getNamespaceName(),
- "queues",
- serviceBusSettings.getSasKeyName(),
- serviceBusSettings.getSasKey());
-
- client = new ManagementClient(builder);
-
- try {
- client.getQueues().forEach(queueDescription -> queues.add(queueDescription.getPath()));
- } catch (ServiceBusException | InterruptedException e) {
- log.error("Failed to get queues.", e);
- throw new RuntimeException("Failed to get queues.", e);
- }
- }
-
- @Override
- public void createTopicIfNotExists(String topic, String properties) {
- if (queues.contains(topic)) {
- return;
- }
-
- try {
- QueueDescription queueDescription = new QueueDescription(topic);
- queueDescription.setRequiresDuplicateDetection(false);
- setQueueConfigs(queueDescription, PropertyUtils.getProps(queueConfigs, properties));
-
- client.createQueue(queueDescription);
- queues.add(topic);
- } catch (ServiceBusException | InterruptedException e) {
- if (e instanceof MessagingEntityAlreadyExistsException) {
- queues.add(topic);
- log.info("[{}] queue already exists.", topic);
- } else {
- log.error("Failed to create queue: [{}]", topic, e);
- }
- }
- }
-
- @Override
- public void deleteTopic(String topic) {
- if (queues.contains(topic)) {
- doDelete(topic);
- } else {
- try {
- if (client.getQueue(topic) != null) {
- doDelete(topic);
- } else {
- log.warn("Azure Service Bus Queue [{}] is not exist.", topic);
- }
- } catch (ServiceBusException | InterruptedException e) {
- log.error("Failed to delete Azure Service Bus queue [{}]", topic, e);
- }
- }
- }
-
- private void doDelete(String topic) {
- try {
- client.deleteTopic(topic);
- } catch (ServiceBusException | InterruptedException e) {
- log.error("Failed to delete Azure Service Bus queue [{}]", topic, e);
- }
- }
-
- private void setQueueConfigs(QueueDescription queueDescription, Map queueConfigs) {
- queueConfigs.forEach((confKey, confValue) -> {
- switch (confKey) {
- case MAX_SIZE:
- queueDescription.setMaxSizeInMB(Long.parseLong(confValue));
- break;
- case MESSAGE_TIME_TO_LIVE:
- queueDescription.setDefaultMessageTimeToLive(Duration.ofSeconds(Long.parseLong(confValue)));
- break;
- case LOCK_DURATION:
- queueDescription.setLockDuration(Duration.ofSeconds(Long.parseLong(confValue)));
- break;
- default:
- log.error("Unknown config: [{}]", confKey);
- }
- });
- }
-
- public void destroy() {
- try {
- client.close();
- } catch (IOException e) {
- log.error("Failed to close ManagementClient.");
- }
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusConsumerTemplate.java b/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusConsumerTemplate.java
deleted file mode 100644
index 8e2b32aab5..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusConsumerTemplate.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.azure.servicebus;
-
-import com.google.gson.Gson;
-import com.google.protobuf.InvalidProtocolBufferException;
-import com.microsoft.azure.servicebus.TransactionContext;
-import com.microsoft.azure.servicebus.primitives.ConnectionStringBuilder;
-import com.microsoft.azure.servicebus.primitives.CoreMessageReceiver;
-import com.microsoft.azure.servicebus.primitives.MessageWithDeliveryTag;
-import com.microsoft.azure.servicebus.primitives.MessagingEntityType;
-import com.microsoft.azure.servicebus.primitives.MessagingFactory;
-import com.microsoft.azure.servicebus.primitives.SettleModePair;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.qpid.proton.amqp.messaging.Data;
-import org.apache.qpid.proton.amqp.transport.ReceiverSettleMode;
-import org.apache.qpid.proton.amqp.transport.SenderSettleMode;
-import org.springframework.util.CollectionUtils;
-import org.thingsboard.server.common.msg.queue.TopicPartitionInfo;
-import org.thingsboard.server.queue.TbQueueAdmin;
-import org.thingsboard.server.queue.TbQueueMsg;
-import org.thingsboard.server.queue.TbQueueMsgDecoder;
-import org.thingsboard.server.queue.common.AbstractTbQueueConsumerTemplate;
-import org.thingsboard.server.queue.common.DefaultTbQueueMsg;
-
-import java.time.Duration;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutionException;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-@Slf4j
-public class TbServiceBusConsumerTemplate extends AbstractTbQueueConsumerTemplate {
- private final TbQueueAdmin admin;
- private final TbQueueMsgDecoder decoder;
- private final TbServiceBusSettings serviceBusSettings;
-
- private final Gson gson = new Gson();
-
- private Set receivers;
- private final Map> pendingMessages = new ConcurrentHashMap<>();
- private volatile int messagesPerQueue;
-
- public TbServiceBusConsumerTemplate(TbQueueAdmin admin, TbServiceBusSettings serviceBusSettings, String topic, TbQueueMsgDecoder decoder) {
- super(topic);
- this.admin = admin;
- this.decoder = decoder;
- this.serviceBusSettings = serviceBusSettings;
- }
-
- @Override
- protected List doPoll(long durationInMillis) {
- List>> messageFutures =
- receivers.stream()
- .map(receiver -> receiver
- .receiveAsync(messagesPerQueue, Duration.ofMillis(durationInMillis))
- .whenComplete((messages, err) -> {
- if (!CollectionUtils.isEmpty(messages)) {
- pendingMessages.put(receiver, messages);
- } else if (err != null) {
- log.error("Failed to receive messages.", err);
- }
- }))
- .collect(Collectors.toList());
- try {
- return fromList(messageFutures)
- .get()
- .stream()
- .flatMap(messages -> CollectionUtils.isEmpty(messages) ? Stream.empty() : messages.stream())
- .collect(Collectors.toList());
- } catch (InterruptedException | ExecutionException e) {
- if (stopped) {
- log.info("[{}] Service Bus consumer is stopped.", getTopic());
- } else {
- log.error("Failed to receive messages", e);
- }
- return Collections.emptyList();
- }
- }
-
- @Override
- protected void doSubscribe(List topicNames) {
- createReceivers();
- messagesPerQueue = receivers.size() / Math.max(partitions.size(), 1);
- }
-
- @Override
- protected void doCommit() {
- pendingMessages.forEach((receiver, msgs) ->
- msgs.forEach(msg -> receiver.completeMessageAsync(msg.getDeliveryTag(), TransactionContext.NULL_TXN)));
- pendingMessages.clear();
- }
-
- @Override
- protected void doUnsubscribe() {
- receivers.forEach(CoreMessageReceiver::closeAsync);
- }
-
- private void createReceivers() {
- List> receiverFutures = partitions.stream()
- .map(TopicPartitionInfo::getFullTopicName)
- .map(queue -> {
- MessagingFactory factory;
- try {
- factory = MessagingFactory.createFromConnectionStringBuilder(createConnection(queue));
- } catch (InterruptedException | ExecutionException e) {
- log.error("Failed to create factory for the queue [{}]", queue);
- throw new RuntimeException("Failed to create the factory", e);
- }
-
- return CoreMessageReceiver.create(factory, queue, queue, 0,
- new SettleModePair(SenderSettleMode.UNSETTLED, ReceiverSettleMode.SECOND),
- MessagingEntityType.QUEUE);
- }).collect(Collectors.toList());
-
- try {
- receivers = new HashSet<>(fromList(receiverFutures).get());
- } catch (InterruptedException | ExecutionException e) {
- if (stopped) {
- log.info("[{}] Service Bus consumer is stopped.", getTopic());
- } else {
- log.error("Failed to create receivers", e);
- }
- }
- }
-
- private ConnectionStringBuilder createConnection(String queue) {
- admin.createTopicIfNotExists(queue);
- return new ConnectionStringBuilder(
- serviceBusSettings.getNamespaceName(),
- queue,
- serviceBusSettings.getSasKeyName(),
- serviceBusSettings.getSasKey());
- }
-
- private CompletableFuture> fromList(List> futures) {
- @SuppressWarnings("unchecked")
- CompletableFuture>[] arrayFuture = new CompletableFuture[futures.size()];
- futures.toArray(arrayFuture);
-
- return CompletableFuture
- .allOf(arrayFuture)
- .thenApply(v -> futures
- .stream()
- .map(CompletableFuture::join)
- .collect(Collectors.toList()));
- }
-
- @Override
- protected T decode(MessageWithDeliveryTag data) throws InvalidProtocolBufferException {
- DefaultTbQueueMsg msg = gson.fromJson(new String(((Data) data.getMessage().getBody()).getValue().getArray()), DefaultTbQueueMsg.class);
- return decoder.decode(msg);
- }
-
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusProducerTemplate.java b/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusProducerTemplate.java
deleted file mode 100644
index 119f28079b..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusProducerTemplate.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.azure.servicebus;
-
-import com.google.gson.Gson;
-import com.microsoft.azure.servicebus.IMessage;
-import com.microsoft.azure.servicebus.Message;
-import com.microsoft.azure.servicebus.QueueClient;
-import com.microsoft.azure.servicebus.ReceiveMode;
-import com.microsoft.azure.servicebus.primitives.ConnectionStringBuilder;
-import com.microsoft.azure.servicebus.primitives.ServiceBusException;
-import lombok.extern.slf4j.Slf4j;
-import org.thingsboard.server.common.msg.queue.TopicPartitionInfo;
-import org.thingsboard.server.queue.TbQueueAdmin;
-import org.thingsboard.server.queue.TbQueueCallback;
-import org.thingsboard.server.queue.TbQueueMsg;
-import org.thingsboard.server.queue.TbQueueProducer;
-import org.thingsboard.server.queue.common.DefaultTbQueueMsg;
-
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-@Slf4j
-public class TbServiceBusProducerTemplate implements TbQueueProducer {
- private final String defaultTopic;
- private final Gson gson = new Gson();
- private final TbQueueAdmin admin;
- private final TbServiceBusSettings serviceBusSettings;
- private final Map clients = new ConcurrentHashMap<>();
- private final ExecutorService executorService;
-
- public TbServiceBusProducerTemplate(TbQueueAdmin admin, TbServiceBusSettings serviceBusSettings, String defaultTopic) {
- this.admin = admin;
- this.defaultTopic = defaultTopic;
- this.serviceBusSettings = serviceBusSettings;
- executorService = Executors.newCachedThreadPool();
- }
-
- @Override
- public void init() {
-
- }
-
- @Override
- public String getDefaultTopic() {
- return defaultTopic;
- }
-
- @Override
- public void send(TopicPartitionInfo tpi, T msg, TbQueueCallback callback) {
- IMessage message = new Message(gson.toJson(new DefaultTbQueueMsg(msg)));
- CompletableFuture future = getClient(tpi.getFullTopicName()).sendAsync(message);
- future.whenCompleteAsync((success, err) -> {
- if (err != null) {
- callback.onFailure(err);
- } else {
- callback.onSuccess(null);
- }
- }, executorService);
- }
-
- @Override
- public void stop() {
- clients.forEach((t, client) -> {
- try {
- client.close();
- } catch (ServiceBusException e) {
- log.error("Failed to close QueueClient.", e);
- }
- });
-
- if (executorService != null) {
- executorService.shutdownNow();
- }
- }
-
- private QueueClient getClient(String topic) {
- return clients.computeIfAbsent(topic, k -> {
- admin.createTopicIfNotExists(topic);
- ConnectionStringBuilder builder =
- new ConnectionStringBuilder(
- serviceBusSettings.getNamespaceName(),
- topic,
- serviceBusSettings.getSasKeyName(),
- serviceBusSettings.getSasKey());
- try {
- return new QueueClient(builder, ReceiveMode.PEEKLOCK);
- } catch (InterruptedException | ServiceBusException e) {
- log.error("Failed to create new client for the Queue: [{}]", topic, e);
- throw new RuntimeException("Failed to create new client for the Queue", e);
- }
- });
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusQueueConfigs.java b/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusQueueConfigs.java
deleted file mode 100644
index 80da7846ea..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusQueueConfigs.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.azure.servicebus;
-
-import jakarta.annotation.PostConstruct;
-import lombok.Getter;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.queue.util.PropertyUtils;
-
-import java.util.Map;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='service-bus'")
-public class TbServiceBusQueueConfigs {
-
- @Value("${queue.service-bus.queue-properties.core:}")
- private String coreProperties;
- @Value("${queue.service-bus.queue-properties.rule-engine:}")
- private String ruleEngineProperties;
- @Value("${queue.service-bus.queue-properties.transport-api:}")
- private String transportApiProperties;
- @Value("${queue.service-bus.queue-properties.notifications:}")
- private String notificationsProperties;
- @Value("${queue.service-bus.queue-properties.js-executor:}")
- private String jsExecutorProperties;
- @Value("${queue.service-bus.queue-properties.version-control:}")
- private String vcProperties;
- @Value("${queue.service-bus.queue-properties.edge:}")
- private String edgeProperties;
-
- @Getter
- private Map coreConfigs;
- @Getter
- private Map ruleEngineConfigs;
- @Getter
- private Map transportApiConfigs;
- @Getter
- private Map notificationsConfigs;
- @Getter
- private Map jsExecutorConfigs;
- @Getter
- private Map vcConfigs;
- @Getter
- private Map edgeConfigs;
-
- @PostConstruct
- private void init() {
- coreConfigs = PropertyUtils.getProps(coreProperties);
- ruleEngineConfigs = PropertyUtils.getProps(ruleEngineProperties);
- transportApiConfigs = PropertyUtils.getProps(transportApiProperties);
- notificationsConfigs = PropertyUtils.getProps(notificationsProperties);
- jsExecutorConfigs = PropertyUtils.getProps(jsExecutorProperties);
- vcConfigs = PropertyUtils.getProps(vcProperties);
- edgeConfigs = PropertyUtils.getProps(edgeProperties);
- }
-
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusSettings.java b/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusSettings.java
deleted file mode 100644
index 98bb11a839..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusSettings.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.azure.servicebus;
-
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.stereotype.Component;
-
-@Slf4j
-@ConditionalOnExpression("'${queue.type:null}'=='service-bus'")
-@Component
-@Data
-public class TbServiceBusSettings {
- @Value("${queue.service_bus.namespace_name}")
- private String namespaceName;
- @Value("${queue.service_bus.sas_key_name}")
- private String sasKeyName;
- @Value("${queue.service_bus.sas_key}")
- private String sasKey;
- @Value("${queue.service_bus.max_messages}")
- private int maxMessages;
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsMonolithQueueFactory.java
deleted file mode 100644
index 310cc1d1c5..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsMonolithQueueFactory.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import com.google.protobuf.util.JsonFormat;
-import jakarta.annotation.PreDestroy;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.common.data.queue.Queue;
-import org.thingsboard.server.common.msg.queue.ServiceType;
-import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsRequest;
-import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsResponse;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeEventNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
-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.TbQueueProducer;
-import org.thingsboard.server.queue.TbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.TbProtoJsQueueMsg;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TbServiceInfoProvider;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueEdgeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings;
-import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings;
-import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin;
-import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate;
-import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate;
-import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes;
-import org.thingsboard.server.queue.sqs.TbAwsSqsSettings;
-
-import java.nio.charset.StandardCharsets;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && '${service.type:null}'=='monolith'")
-public class AwsSqsMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory {
-
- private final TopicService topicService;
- private final TbQueueCoreSettings coreSettings;
- private final TbServiceInfoProvider serviceInfoProvider;
- private final TbQueueRuleEngineSettings ruleEngineSettings;
- private final TbQueueTransportApiSettings transportApiSettings;
- private final TbQueueTransportNotificationSettings transportNotificationSettings;
- private final TbAwsSqsSettings sqsSettings;
- private final TbQueueVersionControlSettings vcSettings;
- private final TbQueueEdgeSettings edgeSettings;
- private final TbQueueRemoteJsInvokeSettings jsInvokeSettings;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin ruleEngineAdmin;
- private final TbQueueAdmin jsExecutorAdmin;
- private final TbQueueAdmin transportApiAdmin;
- private final TbQueueAdmin notificationAdmin;
- private final TbQueueAdmin otaAdmin;
- private final TbQueueAdmin vcAdmin;
- private final TbQueueAdmin edgeAdmin;
-
- public AwsSqsMonolithQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings,
- TbQueueRuleEngineSettings ruleEngineSettings,
- TbServiceInfoProvider serviceInfoProvider,
- TbQueueTransportApiSettings transportApiSettings,
- TbQueueTransportNotificationSettings transportNotificationSettings,
- TbAwsSqsSettings sqsSettings,
- TbQueueVersionControlSettings vcSettings,
- TbQueueEdgeSettings edgeSettings,
- TbAwsSqsQueueAttributes sqsQueueAttributes,
- TbQueueRemoteJsInvokeSettings jsInvokeSettings) {
- this.topicService = topicService;
- this.coreSettings = coreSettings;
- this.serviceInfoProvider = serviceInfoProvider;
- this.ruleEngineSettings = ruleEngineSettings;
- this.transportApiSettings = transportApiSettings;
- this.transportNotificationSettings = transportNotificationSettings;
- this.sqsSettings = sqsSettings;
- this.vcSettings = vcSettings;
- this.edgeSettings = edgeSettings;
- this.jsInvokeSettings = jsInvokeSettings;
-
- this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes());
- this.ruleEngineAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getRuleEngineAttributes());
- this.jsExecutorAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getJsExecutorAttributes());
- this.transportApiAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getTransportApiAttributes());
- this.notificationAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getNotificationsAttributes());
- this.otaAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getOtaAttributes());
- this.vcAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getVcAttributes());
- this.edgeAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getEdgeAttributes());
- }
-
- @Override
- public TbQueueProducer> createTransportNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings,
- topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName());
- }
-
- @Override
- public TbQueueConsumer> createToVersionControlMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders())
- );
- }
-
- @Override
- public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) {
- return new TbAwsSqsConsumerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(configuration.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings,
- topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToCoreMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToCoreNotificationsMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings,
- topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createTransportApiRequestConsumer() {
- return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createTransportApiResponseProducer() {
- return new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic()));
- }
-
- @Override
- @Bean
- public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() {
- TbQueueProducer> producer = new TbAwsSqsProducerTemplate<>(jsExecutorAdmin, sqsSettings, jsInvokeSettings.getRequestTopic());
- TbQueueConsumer> consumer = new TbAwsSqsConsumerTemplate<>(jsExecutorAdmin, sqsSettings,
- jsInvokeSettings.getResponseTopic() + "_" + serviceInfoProvider.getServiceId(),
- msg -> {
- RemoteJsResponse.Builder builder = RemoteJsResponse.newBuilder();
- JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder);
- return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders());
- });
-
- DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder
- , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder();
- builder.queueAdmin(jsExecutorAdmin);
- builder.requestTemplate(producer);
- builder.responseTemplate(consumer);
- builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests());
- builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout());
- builder.pollInterval(jsInvokeSettings.getResponsePollInterval());
- return builder.build();
- }
-
- @Override
- public TbQueueProducer> createToUsageStatsServiceMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()));
- }
-
- @Override
- public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()));
- }
-
- @Override
- public TbQueueProducer> createVersionControlMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic()));
- }
-
- public TbQueueProducer> createHousekeeperMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()));
- }
-
- @Override
- public TbQueueConsumer> createHousekeeperMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperReprocessingMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()));
- }
-
- @Override
- public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createEdgeMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(edgeAdmin, sqsSettings, topicService.buildTopicName(edgeSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createEdgeMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(edgeAdmin, sqsSettings, topicService.buildTopicName(edgeSettings.getTopic()));
- }
-
- @Override
- public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings,
- topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createEdgeNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings,
- topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName());
- }
-
- @Override
- public TbQueueProducer> createEdgeEventMsgProducer() {
- return null;
- }
-
- @PreDestroy
- private void destroy() {
- if (coreAdmin != null) {
- coreAdmin.destroy();
- }
- if (ruleEngineAdmin != null) {
- ruleEngineAdmin.destroy();
- }
- if (jsExecutorAdmin != null) {
- jsExecutorAdmin.destroy();
- }
- if (transportApiAdmin != null) {
- transportApiAdmin.destroy();
- }
- if (notificationAdmin != null) {
- notificationAdmin.destroy();
- }
- if (otaAdmin != null) {
- otaAdmin.destroy();
- }
- if (vcAdmin != null) {
- vcAdmin.destroy();
- }
- if (edgeAdmin != null) {
- edgeAdmin.destroy();
- }
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbCoreQueueFactory.java
deleted file mode 100644
index 515c1bba44..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbCoreQueueFactory.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import com.google.protobuf.util.JsonFormat;
-import jakarta.annotation.PreDestroy;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.common.msg.queue.ServiceType;
-import org.thingsboard.server.gen.js.JsInvokeProtos;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
-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.TbQueueProducer;
-import org.thingsboard.server.queue.TbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.TbProtoJsQueueMsg;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TbServiceInfoProvider;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueEdgeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings;
-import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings;
-import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin;
-import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate;
-import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate;
-import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes;
-import org.thingsboard.server.queue.sqs.TbAwsSqsSettings;
-
-import java.nio.charset.StandardCharsets;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && '${service.type:null}'=='tb-core'")
-public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory {
-
- private final TbAwsSqsSettings sqsSettings;
- private final TbQueueRuleEngineSettings ruleEngineSettings;
- private final TbQueueCoreSettings coreSettings;
- private final TbQueueTransportApiSettings transportApiSettings;
- private final TopicService topicService;
- private final TbServiceInfoProvider serviceInfoProvider;
- private final TbQueueRemoteJsInvokeSettings jsInvokeSettings;
- private final TbQueueTransportNotificationSettings transportNotificationSettings;
- private final TbQueueVersionControlSettings vcSettings;
- private final TbQueueEdgeSettings edgeSettings;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin ruleEngineAdmin;
- private final TbQueueAdmin jsExecutorAdmin;
- private final TbQueueAdmin transportApiAdmin;
- private final TbQueueAdmin notificationAdmin;
- private final TbQueueAdmin otaAdmin;
- private final TbQueueAdmin vcAdmin;
- private final TbQueueAdmin edgeAdmin;
-
- public AwsSqsTbCoreQueueFactory(TbAwsSqsSettings sqsSettings,
- TbQueueCoreSettings coreSettings,
- TbQueueTransportApiSettings transportApiSettings,
- TbQueueRuleEngineSettings ruleEngineSettings,
- TopicService topicService,
- TbQueueVersionControlSettings vcSettings,
- TbQueueEdgeSettings edgeSettings,
- TbServiceInfoProvider serviceInfoProvider,
- TbQueueRemoteJsInvokeSettings jsInvokeSettings,
- TbAwsSqsQueueAttributes sqsQueueAttributes,
- TbQueueTransportNotificationSettings transportNotificationSettings) {
- this.sqsSettings = sqsSettings;
- this.coreSettings = coreSettings;
- this.transportApiSettings = transportApiSettings;
- this.ruleEngineSettings = ruleEngineSettings;
- this.edgeSettings = edgeSettings;
- this.topicService = topicService;
- this.serviceInfoProvider = serviceInfoProvider;
- this.jsInvokeSettings = jsInvokeSettings;
- this.transportNotificationSettings = transportNotificationSettings;
- this.vcSettings = vcSettings;
-
- this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes());
- this.ruleEngineAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getRuleEngineAttributes());
- this.jsExecutorAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getJsExecutorAttributes());
- this.transportApiAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getTransportApiAttributes());
- this.notificationAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getNotificationsAttributes());
- this.otaAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getOtaAttributes());
- this.vcAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getVcAttributes());
- this.edgeAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getEdgeAttributes());
- }
-
- @Override
- public TbQueueProducer> createTransportNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings,
- topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName());
- }
-
- @Override
- public TbQueueConsumer> createToCoreMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToCoreNotificationsMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings,
- topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createTransportApiRequestConsumer() {
- return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createTransportApiResponseProducer() {
- return new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic()));
- }
-
- @Override
- @Bean
- public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() {
- TbQueueProducer> producer = new TbAwsSqsProducerTemplate<>(jsExecutorAdmin, sqsSettings, jsInvokeSettings.getRequestTopic());
- TbQueueConsumer> consumer = new TbAwsSqsConsumerTemplate<>(jsExecutorAdmin, sqsSettings,
- jsInvokeSettings.getResponseTopic() + "_" + serviceInfoProvider.getServiceId(),
- msg -> {
- JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder();
- JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder);
- return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders());
- });
-
- DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder
- , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder();
- builder.queueAdmin(jsExecutorAdmin);
- builder.requestTemplate(producer);
- builder.responseTemplate(consumer);
- builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests());
- builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout());
- builder.pollInterval(jsInvokeSettings.getResponsePollInterval());
- return builder.build();
- }
-
- @Override
- public TbQueueProducer> createToUsageStatsServiceMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()));
- }
-
- @Override
- public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()));
- }
-
- @Override
- public TbQueueProducer> createVersionControlMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()));
- }
-
- @Override
- public TbQueueConsumer> createHousekeeperMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperReprocessingMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()));
- }
-
- @Override
- public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createEdgeMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(edgeAdmin, sqsSettings, topicService.buildTopicName(edgeSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createEdgeMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(edgeAdmin, sqsSettings, topicService.buildTopicName(edgeSettings.getTopic()));
- }
-
- @Override
- public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings,
- topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createEdgeNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings,
- topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName());
- }
-
- @PreDestroy
- private void destroy() {
- if (coreAdmin != null) {
- coreAdmin.destroy();
- }
- if (ruleEngineAdmin != null) {
- ruleEngineAdmin.destroy();
- }
- if (jsExecutorAdmin != null) {
- jsExecutorAdmin.destroy();
- }
- if (transportApiAdmin != null) {
- transportApiAdmin.destroy();
- }
- if (notificationAdmin != null) {
- notificationAdmin.destroy();
- }
- if (otaAdmin != null) {
- otaAdmin.destroy();
- }
- if (vcAdmin != null) {
- vcAdmin.destroy();
- }
- if (edgeAdmin != null) {
- edgeAdmin.destroy();
- }
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java
deleted file mode 100644
index a93aba2764..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import com.google.protobuf.util.JsonFormat;
-import jakarta.annotation.PreDestroy;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
-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.ToCoreMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg;
-import org.thingsboard.server.queue.TbQueueAdmin;
-import org.thingsboard.server.queue.TbQueueConsumer;
-import org.thingsboard.server.queue.TbQueueProducer;
-import org.thingsboard.server.queue.TbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.TbProtoJsQueueMsg;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TbServiceInfoProvider;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueEdgeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings;
-import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin;
-import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate;
-import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate;
-import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes;
-import org.thingsboard.server.queue.sqs.TbAwsSqsSettings;
-
-import java.nio.charset.StandardCharsets;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && '${service.type:null}'=='tb-rule-engine'")
-public class AwsSqsTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory {
-
- private final TopicService topicService;
- private final TbQueueCoreSettings coreSettings;
- private final TbServiceInfoProvider serviceInfoProvider;
- private final TbQueueRuleEngineSettings ruleEngineSettings;
- private final TbAwsSqsSettings sqsSettings;
- private final TbQueueRemoteJsInvokeSettings jsInvokeSettings;
- private final TbQueueTransportNotificationSettings transportNotificationSettings;
- private final TbQueueEdgeSettings edgeSettings;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin ruleEngineAdmin;
- private final TbQueueAdmin jsExecutorAdmin;
- private final TbQueueAdmin notificationAdmin;
- private final TbQueueAdmin otaAdmin;
- private final TbQueueAdmin edgeAdmin;
-
- public AwsSqsTbRuleEngineQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings,
- TbQueueRuleEngineSettings ruleEngineSettings,
- TbServiceInfoProvider serviceInfoProvider,
- TbAwsSqsSettings sqsSettings,
- TbAwsSqsQueueAttributes sqsQueueAttributes,
- TbQueueRemoteJsInvokeSettings jsInvokeSettings,
- TbQueueTransportNotificationSettings transportNotificationSettings,
- TbQueueEdgeSettings edgeSettings) {
- this.topicService = topicService;
- this.coreSettings = coreSettings;
- this.serviceInfoProvider = serviceInfoProvider;
- this.ruleEngineSettings = ruleEngineSettings;
- this.sqsSettings = sqsSettings;
- this.jsInvokeSettings = jsInvokeSettings;
- this.transportNotificationSettings = transportNotificationSettings;
- this.edgeSettings = edgeSettings;
-
- this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes());
- this.ruleEngineAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getRuleEngineAttributes());
- this.jsExecutorAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getJsExecutorAttributes());
- this.notificationAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getNotificationsAttributes());
- this.otaAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getOtaAttributes());
- this.edgeAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getEdgeAttributes());
- }
-
- @Override
- public TbQueueProducer> createTransportNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createEdgeMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(edgeAdmin, sqsSettings, topicService.buildTopicName(edgeSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createEdgeNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName());
- }
-
- @Override
- public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) {
- return new TbAwsSqsConsumerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(configuration.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings,
- topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- @Bean
- public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() {
- TbQueueProducer> producer = new TbAwsSqsProducerTemplate<>(jsExecutorAdmin, sqsSettings, jsInvokeSettings.getRequestTopic());
- TbQueueConsumer> consumer = new TbAwsSqsConsumerTemplate<>(jsExecutorAdmin, sqsSettings,
- jsInvokeSettings.getResponseTopic() + "_" + serviceInfoProvider.getServiceId(),
- msg -> {
- JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder();
- JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder);
- return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders());
- });
-
- DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder
- , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder();
- builder.queueAdmin(jsExecutorAdmin);
- builder.requestTemplate(producer);
- builder.responseTemplate(consumer);
- builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests());
- builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout());
- builder.pollInterval(jsInvokeSettings.getResponsePollInterval());
- return builder.build();
- }
-
- @Override
- public TbQueueProducer> createToUsageStatsServiceMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()));
- }
-
- @Override
- public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()));
- }
-
- @PreDestroy
- private void destroy() {
- if (coreAdmin != null) {
- coreAdmin.destroy();
- }
- if (ruleEngineAdmin != null) {
- ruleEngineAdmin.destroy();
- }
- if (jsExecutorAdmin != null) {
- jsExecutorAdmin.destroy();
- }
- if (notificationAdmin != null) {
- notificationAdmin.destroy();
- }
- if (otaAdmin != null) {
- otaAdmin.destroy();
- }
- }
-
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbVersionControlQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbVersionControlQueueFactory.java
deleted file mode 100644
index 67ff0393bd..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbVersionControlQueueFactory.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import jakarta.annotation.PreDestroy;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.gen.transport.TransportProtos;
-import org.thingsboard.server.queue.TbQueueAdmin;
-import org.thingsboard.server.queue.TbQueueConsumer;
-import org.thingsboard.server.queue.TbQueueProducer;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings;
-import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin;
-import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate;
-import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate;
-import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes;
-import org.thingsboard.server.queue.sqs.TbAwsSqsSettings;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && '${service.type:null}'=='tb-vc-executor'")
-public class AwsSqsTbVersionControlQueueFactory implements TbVersionControlQueueFactory {
-
- private final TbAwsSqsSettings sqsSettings;
- private final TbQueueCoreSettings coreSettings;
- private final TbQueueVersionControlSettings vcSettings;
- private final TopicService topicService;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin notificationAdmin;
- private final TbQueueAdmin vcAdmin;
-
- public AwsSqsTbVersionControlQueueFactory(TbAwsSqsSettings sqsSettings,
- TbQueueCoreSettings coreSettings,
- TbQueueVersionControlSettings vcSettings,
- TbAwsSqsQueueAttributes sqsQueueAttributes,
- TopicService topicService
- ) {
- this.sqsSettings = sqsSettings;
- this.coreSettings = coreSettings;
- this.vcSettings = vcSettings;
- this.topicService = topicService;
-
- this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes());
- this.notificationAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getNotificationsAttributes());
- this.vcAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getVcAttributes());
- }
-
- @Override
- public TbQueueProducer> createToUsageStatsServiceMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueConsumer> createToVersionControlMsgConsumer() {
- return new TbAwsSqsConsumerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders())
- );
- }
-
- @Override
- public TbQueueProducer> createHousekeeperMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()));
- }
-
- @PreDestroy
- private void destroy() {
- if (coreAdmin != null) {
- coreAdmin.destroy();
- }
- if (notificationAdmin != null) {
- notificationAdmin.destroy();
- }
- if (vcAdmin != null) {
- vcAdmin.destroy();
- }
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTransportQueueFactory.java
deleted file mode 100644
index 407ef86a99..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTransportQueueFactory.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import jakarta.annotation.PreDestroy;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.gen.transport.TransportProtos;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
-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.TbQueueProducer;
-import org.thingsboard.server.queue.TbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TbServiceInfoProvider;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings;
-import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin;
-import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate;
-import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate;
-import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes;
-import org.thingsboard.server.queue.sqs.TbAwsSqsSettings;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && (('${service.type:null}'=='monolith' && '${transport.api_enabled:true}'=='true') || '${service.type:null}'=='tb-transport')")
-@Slf4j
-public class AwsSqsTransportQueueFactory implements TbTransportQueueFactory {
- private final TbQueueTransportApiSettings transportApiSettings;
- private final TbQueueTransportNotificationSettings transportNotificationSettings;
- private final TbAwsSqsSettings sqsSettings;
- private final TbQueueCoreSettings coreSettings;
- private final TbServiceInfoProvider serviceInfoProvider;
- private final TbQueueRuleEngineSettings ruleEngineSettings;
- private final TopicService topicService;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin transportApiAdmin;
- private final TbQueueAdmin notificationAdmin;
- private final TbQueueAdmin ruleEngineAdmin;
-
- public AwsSqsTransportQueueFactory(TbQueueTransportApiSettings transportApiSettings,
- TbQueueTransportNotificationSettings transportNotificationSettings,
- TbAwsSqsSettings sqsSettings,
- TbServiceInfoProvider serviceInfoProvider,
- TbQueueCoreSettings coreSettings,
- TbAwsSqsQueueAttributes sqsQueueAttributes,
- TbQueueRuleEngineSettings ruleEngineSettings,
- TopicService topicService) {
- this.transportApiSettings = transportApiSettings;
- this.transportNotificationSettings = transportNotificationSettings;
- this.sqsSettings = sqsSettings;
- this.serviceInfoProvider = serviceInfoProvider;
- this.coreSettings = coreSettings;
- this.ruleEngineSettings = ruleEngineSettings;
- this.topicService = topicService;
-
- this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes());
- this.transportApiAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getTransportApiAttributes());
- this.notificationAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getNotificationsAttributes());
- this.ruleEngineAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getRuleEngineAttributes());
- }
-
- @Override
- public TbQueueRequestTemplate, TbProtoQueueMsg> createTransportApiRequestTemplate() {
- TbQueueProducer> producerTemplate =
- new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()));
-
- TbQueueConsumer> consumerTemplate =
- new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings,
- topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "_" + serviceInfoProvider.getServiceId()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders()));
-
- DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder
- , TbProtoQueueMsg> templateBuilder = DefaultTbQueueRequestTemplate.builder();
- templateBuilder.queueAdmin(transportApiAdmin);
- templateBuilder.requestTemplate(producerTemplate);
- templateBuilder.responseTemplate(consumerTemplate);
- templateBuilder.maxPendingRequests(transportApiSettings.getMaxPendingRequests());
- templateBuilder.maxRequestTimeout(transportApiSettings.getMaxRequestsTimeout());
- templateBuilder.pollInterval(transportApiSettings.getResponsePollInterval());
- return templateBuilder.build();
- }
-
- @Override
- public TbQueueProducer> createRuleEngineMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreNotificationsMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueConsumer> createTransportNotificationsConsumer() {
- return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "_" + serviceInfoProvider.getServiceId()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createToUsageStatsServiceMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperMsgProducer() {
- return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()));
- }
-
- @PreDestroy
- private void destroy() {
- if (coreAdmin != null) {
- coreAdmin.destroy();
- }
- if (transportApiAdmin != null) {
- transportApiAdmin.destroy();
- }
- if (notificationAdmin != null) {
- notificationAdmin.destroy();
- }
- if (ruleEngineAdmin != null) {
- ruleEngineAdmin.destroy();
- }
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubMonolithQueueFactory.java
deleted file mode 100644
index 05bef819b7..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubMonolithQueueFactory.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import com.google.protobuf.util.JsonFormat;
-import jakarta.annotation.PreDestroy;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.common.data.queue.Queue;
-import org.thingsboard.server.common.msg.queue.ServiceType;
-import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsRequest;
-import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsResponse;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeEventNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
-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.TbQueueProducer;
-import org.thingsboard.server.queue.TbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.TbProtoJsQueueMsg;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TbServiceInfoProvider;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.pubsub.TbPubSubAdmin;
-import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate;
-import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate;
-import org.thingsboard.server.queue.pubsub.TbPubSubSettings;
-import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueEdgeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings;
-import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings;
-
-import java.nio.charset.StandardCharsets;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='pubsub' && '${service.type:null}'=='monolith'")
-public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory {
-
- private final TbPubSubSettings pubSubSettings;
- private final TbQueueCoreSettings coreSettings;
- private final TbQueueRuleEngineSettings ruleEngineSettings;
- private final TbQueueTransportApiSettings transportApiSettings;
- private final TbQueueTransportNotificationSettings transportNotificationSettings;
- private final TopicService topicService;
- private final TbServiceInfoProvider serviceInfoProvider;
- private final TbQueueRemoteJsInvokeSettings jsInvokeSettings;
- private final TbQueueVersionControlSettings vcSettings;
- private final TbQueueEdgeSettings edgeSettings;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin ruleEngineAdmin;
- private final TbQueueAdmin jsExecutorAdmin;
- private final TbQueueAdmin transportApiAdmin;
- private final TbQueueAdmin notificationAdmin;
- private final TbQueueAdmin vcAdmin;
- private final TbQueueAdmin edgeAdmin;
-
- public PubSubMonolithQueueFactory(TbPubSubSettings pubSubSettings,
- TbQueueCoreSettings coreSettings,
- TbQueueRuleEngineSettings ruleEngineSettings,
- TbQueueTransportApiSettings transportApiSettings,
- TbQueueTransportNotificationSettings transportNotificationSettings,
- TopicService topicService,
- TbServiceInfoProvider serviceInfoProvider,
- TbPubSubSubscriptionSettings pubSubSubscriptionSettings,
- TbQueueRemoteJsInvokeSettings jsInvokeSettings,
- TbQueueVersionControlSettings vcSettings,
- TbQueueEdgeSettings edgeSettings) {
- this.pubSubSettings = pubSubSettings;
- this.coreSettings = coreSettings;
- this.ruleEngineSettings = ruleEngineSettings;
- this.transportApiSettings = transportApiSettings;
- this.transportNotificationSettings = transportNotificationSettings;
- this.topicService = topicService;
- this.serviceInfoProvider = serviceInfoProvider;
- this.vcSettings = vcSettings;
- this.edgeSettings = edgeSettings;
-
- this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings());
- this.ruleEngineAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getRuleEngineSettings());
- this.jsExecutorAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getJsExecutorSettings());
- this.transportApiAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getTransportApiSettings());
- this.notificationAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getNotificationsSettings());
- this.vcAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getVcSettings());
- this.edgeAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getEdgeSettings());
-
- this.jsInvokeSettings = jsInvokeSettings;
- }
-
- @Override
- public TbQueueProducer> createTransportNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineMsgProducer() {
- return new TbPubSubProducerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
-
- }
-
- @Override
- public TbQueueProducer> createRuleEngineNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueConsumer> createToVersionControlMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(vcAdmin, pubSubSettings, topicService.buildTopicName(vcSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders())
- );
- }
-
- @Override
- public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) {
- return new TbPubSubConsumerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(configuration.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings,
- topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToCoreMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToCoreNotificationsMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings,
- topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createTransportApiRequestConsumer() {
- return new TbPubSubConsumerTemplate<>(transportApiAdmin, pubSubSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createTransportApiResponseProducer() {
- return new TbPubSubProducerTemplate<>(transportApiAdmin, pubSubSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic()));
- }
-
- @Override
- @Bean
- public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() {
- TbQueueProducer> producer = new TbPubSubProducerTemplate<>(jsExecutorAdmin, pubSubSettings, jsInvokeSettings.getRequestTopic());
- TbQueueConsumer> consumer = new TbPubSubConsumerTemplate<>(jsExecutorAdmin, pubSubSettings,
- jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(),
- msg -> {
- RemoteJsResponse.Builder builder = RemoteJsResponse.newBuilder();
- JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder);
- return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders());
- });
-
- DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder
- , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder();
- builder.queueAdmin(jsExecutorAdmin);
- builder.requestTemplate(producer);
- builder.responseTemplate(consumer);
- builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests());
- builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout());
- builder.pollInterval(jsInvokeSettings.getResponsePollInterval());
- return builder.build();
- }
-
- @Override
- public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()));
- }
-
- @Override
- public TbQueueProducer> createToUsageStatsServiceMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()));
- }
-
- @Override
- public TbQueueProducer> createVersionControlMsgProducer() {
- return new TbPubSubProducerTemplate<>(vcAdmin, pubSubSettings, topicService.buildTopicName(vcSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()));
- }
-
- @Override
- public TbQueueConsumer> createHousekeeperMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperReprocessingMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()));
- }
-
- @Override
- public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createEdgeMsgProducer() {
- return new TbPubSubProducerTemplate<>(edgeAdmin, pubSubSettings, topicService.buildTopicName(edgeSettings.getTopic()));
- }
-
- @Override
- public TbQueueConsumer> createEdgeMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(edgeAdmin, pubSubSettings, topicService.buildTopicName(edgeSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings,
- topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createEdgeNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings,
- topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName());
- }
-
- @Override
- public TbQueueProducer> createEdgeEventMsgProducer() {
- return null;
- }
-
- @PreDestroy
- private void destroy() {
- if (coreAdmin != null) {
- coreAdmin.destroy();
- }
- if (ruleEngineAdmin != null) {
- ruleEngineAdmin.destroy();
- }
- if (jsExecutorAdmin != null) {
- jsExecutorAdmin.destroy();
- }
- if (transportApiAdmin != null) {
- transportApiAdmin.destroy();
- }
- if (notificationAdmin != null) {
- notificationAdmin.destroy();
- }
- if (vcAdmin != null) {
- vcAdmin.destroy();
- }
- if (edgeAdmin != null) {
- edgeAdmin.destroy();
- }
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbCoreQueueFactory.java
deleted file mode 100644
index 919d895a97..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbCoreQueueFactory.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import com.google.protobuf.util.JsonFormat;
-import jakarta.annotation.PreDestroy;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.common.msg.queue.ServiceType;
-import org.thingsboard.server.gen.js.JsInvokeProtos;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
-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.TbQueueProducer;
-import org.thingsboard.server.queue.TbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.TbProtoJsQueueMsg;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TbServiceInfoProvider;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.pubsub.TbPubSubAdmin;
-import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate;
-import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate;
-import org.thingsboard.server.queue.pubsub.TbPubSubSettings;
-import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueEdgeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings;
-
-import java.nio.charset.StandardCharsets;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='pubsub' && '${service.type:null}'=='tb-core'")
-public class PubSubTbCoreQueueFactory implements TbCoreQueueFactory {
-
- private final TbPubSubSettings pubSubSettings;
- private final TbQueueCoreSettings coreSettings;
- private final TbQueueTransportApiSettings transportApiSettings;
- private final TopicService topicService;
- private final TbServiceInfoProvider serviceInfoProvider;
- private final TbQueueRemoteJsInvokeSettings jsInvokeSettings;
- private final TbQueueTransportNotificationSettings transportNotificationSettings;
- private final TbQueueRuleEngineSettings ruleEngineSettings;
- private final TbQueueEdgeSettings edgeSettings;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin jsExecutorAdmin;
- private final TbQueueAdmin transportApiAdmin;
- private final TbQueueAdmin notificationAdmin;
- private final TbQueueAdmin ruleEngineAdmin;
- private final TbQueueAdmin edgeAdmin;
-
- public PubSubTbCoreQueueFactory(TbPubSubSettings pubSubSettings,
- TbQueueCoreSettings coreSettings,
- TbQueueTransportApiSettings transportApiSettings,
- TopicService topicService,
- TbServiceInfoProvider serviceInfoProvider,
- TbQueueRemoteJsInvokeSettings jsInvokeSettings,
- TbQueueTransportNotificationSettings transportNotificationSettings,
- TbQueueRuleEngineSettings ruleEngineSettings,
- TbQueueEdgeSettings edgeSettings,
- TbPubSubSubscriptionSettings pubSubSubscriptionSettings) {
- this.pubSubSettings = pubSubSettings;
- this.coreSettings = coreSettings;
- this.transportApiSettings = transportApiSettings;
- this.topicService = topicService;
- this.serviceInfoProvider = serviceInfoProvider;
- this.jsInvokeSettings = jsInvokeSettings;
- this.transportNotificationSettings = transportNotificationSettings;
- this.ruleEngineSettings = ruleEngineSettings;
- this.edgeSettings = edgeSettings;
-
- this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings());
- this.jsExecutorAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getJsExecutorSettings());
- this.transportApiAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getTransportApiSettings());
- this.notificationAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getNotificationsSettings());
- this.ruleEngineAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getRuleEngineSettings());
- this.edgeAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getEdgeSettings());
- }
-
- @Override
- public TbQueueProducer> createTransportNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings,
- topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName());
- }
-
- @Override
- public TbQueueConsumer> createToCoreMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToCoreNotificationsMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings,
- topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createTransportApiRequestConsumer() {
- return new TbPubSubConsumerTemplate<>(transportApiAdmin, pubSubSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createTransportApiResponseProducer() {
- return new TbPubSubProducerTemplate<>(transportApiAdmin, pubSubSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic()));
- }
-
- @Override
- @Bean
- public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() {
- TbQueueProducer> producer = new TbPubSubProducerTemplate<>(jsExecutorAdmin, pubSubSettings, jsInvokeSettings.getRequestTopic());
- TbQueueConsumer> consumer = new TbPubSubConsumerTemplate<>(jsExecutorAdmin, pubSubSettings,
- jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(),
- msg -> {
- JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder();
- JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder);
- return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders());
- });
-
- DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder
- , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder();
- builder.queueAdmin(jsExecutorAdmin);
- builder.requestTemplate(producer);
- builder.responseTemplate(consumer);
- builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests());
- builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout());
- builder.pollInterval(jsInvokeSettings.getResponsePollInterval());
- return builder.build();
- }
-
- @Override
- public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()));
- }
-
- @Override
- public TbQueueProducer> createToUsageStatsServiceMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()));
- }
-
- @Override
- public TbQueueProducer> createVersionControlMsgProducer() {
- //TODO: version-control
- return null;
- }
-
- @Override
- public TbQueueProducer> createHousekeeperMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()));
- }
-
- @Override
- public TbQueueConsumer> createHousekeeperMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperReprocessingMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()));
- }
-
- @Override
- public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createEdgeMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(edgeAdmin, pubSubSettings, topicService.buildTopicName(edgeSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createEdgeMsgProducer() {
- return new TbPubSubProducerTemplate<>(edgeAdmin, pubSubSettings, topicService.buildTopicName(edgeSettings.getTopic()));
- }
-
- @Override
- public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings,
- topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createEdgeNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings,
- topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName());
- }
-
- @PreDestroy
- private void destroy() {
- if (coreAdmin != null) {
- coreAdmin.destroy();
- }
- if (jsExecutorAdmin != null) {
- jsExecutorAdmin.destroy();
- }
- if (transportApiAdmin != null) {
- transportApiAdmin.destroy();
- }
- if (notificationAdmin != null) {
- notificationAdmin.destroy();
- }
- if (ruleEngineAdmin != null) {
- ruleEngineAdmin.destroy();
- }
- if (edgeAdmin != null) {
- edgeAdmin.destroy();
- }
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbRuleEngineQueueFactory.java
deleted file mode 100644
index 671da15f20..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbRuleEngineQueueFactory.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import com.google.protobuf.util.JsonFormat;
-import jakarta.annotation.PreDestroy;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
-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.ToCoreMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeEventNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg;
-import org.thingsboard.server.queue.TbQueueAdmin;
-import org.thingsboard.server.queue.TbQueueConsumer;
-import org.thingsboard.server.queue.TbQueueProducer;
-import org.thingsboard.server.queue.TbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.TbProtoJsQueueMsg;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TbServiceInfoProvider;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.pubsub.TbPubSubAdmin;
-import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate;
-import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate;
-import org.thingsboard.server.queue.pubsub.TbPubSubSettings;
-import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueEdgeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings;
-
-import java.nio.charset.StandardCharsets;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='pubsub' && '${service.type:null}'=='tb-rule-engine'")
-public class PubSubTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory {
-
- private final TbPubSubSettings pubSubSettings;
- private final TbQueueCoreSettings coreSettings;
- private final TbQueueRuleEngineSettings ruleEngineSettings;
- private final TopicService topicService;
- private final TbServiceInfoProvider serviceInfoProvider;
- private final TbQueueRemoteJsInvokeSettings jsInvokeSettings;
- private final TbQueueTransportNotificationSettings transportNotificationSettings;
- private final TbQueueEdgeSettings edgeSettings;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin ruleEngineAdmin;
- private final TbQueueAdmin jsExecutorAdmin;
- private final TbQueueAdmin notificationAdmin;
- private final TbQueueAdmin edgeAdmin;
-
- public PubSubTbRuleEngineQueueFactory(TbPubSubSettings pubSubSettings,
- TbQueueCoreSettings coreSettings,
- TbQueueRuleEngineSettings ruleEngineSettings,
- TopicService topicService,
- TbServiceInfoProvider serviceInfoProvider,
- TbQueueRemoteJsInvokeSettings jsInvokeSettings,
- TbQueueTransportNotificationSettings transportNotificationSettings,
- TbPubSubSubscriptionSettings pubSubSubscriptionSettings,
- TbQueueEdgeSettings edgeSettings) {
- this.pubSubSettings = pubSubSettings;
- this.coreSettings = coreSettings;
- this.ruleEngineSettings = ruleEngineSettings;
- this.topicService = topicService;
- this.serviceInfoProvider = serviceInfoProvider;
- this.jsInvokeSettings = jsInvokeSettings;
- this.transportNotificationSettings = transportNotificationSettings;
- this.edgeSettings = edgeSettings;
-
- this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings());
- this.ruleEngineAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getRuleEngineSettings());
- this.jsExecutorAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getJsExecutorSettings());
- this.notificationAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getNotificationsSettings());
- this.edgeAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getEdgeSettings());
- }
-
- @Override
- public TbQueueProducer> createTransportNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineMsgProducer() {
- return new TbPubSubProducerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createEdgeMsgProducer() {
- return new TbPubSubProducerTemplate<>(edgeAdmin, pubSubSettings, topicService.buildTopicName(edgeSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createEdgeNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName());
- }
-
- @Override
- public TbQueueProducer> createEdgeEventMsgProducer() {
- return null;
- }
-
- @Override
- public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) {
- return new TbPubSubConsumerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(configuration.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings,
- topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- @Bean
- public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() {
- TbQueueProducer> producer = new TbPubSubProducerTemplate<>(jsExecutorAdmin, pubSubSettings, jsInvokeSettings.getRequestTopic());
- TbQueueConsumer> consumer = new TbPubSubConsumerTemplate<>(jsExecutorAdmin, pubSubSettings,
- jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(),
- msg -> {
- JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder();
- JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder);
- return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders());
- });
-
- DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder
- , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder();
- builder.queueAdmin(jsExecutorAdmin);
- builder.requestTemplate(producer);
- builder.responseTemplate(consumer);
- builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests());
- builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout());
- builder.pollInterval(jsInvokeSettings.getResponsePollInterval());
- return builder.build();
- }
-
- @Override
- public TbQueueProducer> createToUsageStatsServiceMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()));
- }
-
- @Override
- public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()));
- }
-
- @PreDestroy
- private void destroy() {
- if (coreAdmin != null) {
- coreAdmin.destroy();
- }
- if (ruleEngineAdmin != null) {
- ruleEngineAdmin.destroy();
- }
- if (jsExecutorAdmin != null) {
- jsExecutorAdmin.destroy();
- }
- if (notificationAdmin != null) {
- notificationAdmin.destroy();
- }
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbVersionControlQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbVersionControlQueueFactory.java
deleted file mode 100644
index b6da4e2973..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbVersionControlQueueFactory.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import jakarta.annotation.PreDestroy;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.gen.transport.TransportProtos;
-import org.thingsboard.server.queue.TbQueueAdmin;
-import org.thingsboard.server.queue.TbQueueConsumer;
-import org.thingsboard.server.queue.TbQueueProducer;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.pubsub.TbPubSubAdmin;
-import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate;
-import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate;
-import org.thingsboard.server.queue.pubsub.TbPubSubSettings;
-import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='pubsub' && '${service.type:null}'=='tb-vc-executor'")
-public class PubSubTbVersionControlQueueFactory implements TbVersionControlQueueFactory {
-
- private final TbPubSubSettings pubSubSettings;
- private final TbQueueCoreSettings coreSettings;
- private final TbQueueVersionControlSettings vcSettings;
- private final TopicService topicService;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin notificationAdmin;
- private final TbQueueAdmin vcAdmin;
-
- public PubSubTbVersionControlQueueFactory(TbPubSubSettings pubSubSettings,
- TbQueueCoreSettings coreSettings,
- TbQueueVersionControlSettings vcSettings,
- TbPubSubSubscriptionSettings pubSubSubscriptionSettings,
- TopicService topicService
- ) {
- this.pubSubSettings = pubSubSettings;
- this.coreSettings = coreSettings;
- this.vcSettings = vcSettings;
- this.topicService = topicService;
-
- this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings());
- this.notificationAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getNotificationsSettings());
- this.vcAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getVcSettings());
- }
-
- @Override
- public TbQueueProducer> createToUsageStatsServiceMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueConsumer> createToVersionControlMsgConsumer() {
- return new TbPubSubConsumerTemplate<>(vcAdmin, pubSubSettings, topicService.buildTopicName(vcSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders())
- );
- }
-
- @Override
- public TbQueueProducer> createHousekeeperMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()));
- }
-
- @PreDestroy
- private void destroy() {
- if (coreAdmin != null) {
- coreAdmin.destroy();
- }
- if (notificationAdmin != null) {
- notificationAdmin.destroy();
- }
- if (vcAdmin != null) {
- vcAdmin.destroy();
- }
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTransportQueueFactory.java
deleted file mode 100644
index a7500d2083..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTransportQueueFactory.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import jakarta.annotation.PreDestroy;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
-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.TbQueueProducer;
-import org.thingsboard.server.queue.TbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TbServiceInfoProvider;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.pubsub.TbPubSubAdmin;
-import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate;
-import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate;
-import org.thingsboard.server.queue.pubsub.TbPubSubSettings;
-import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='pubsub' && (('${service.type:null}'=='monolith' && '${transport.api_enabled:true}'=='true') || '${service.type:null}'=='tb-transport')")
-@Slf4j
-public class PubSubTransportQueueFactory implements TbTransportQueueFactory {
-
- private final TbPubSubSettings pubSubSettings;
- private final TbServiceInfoProvider serviceInfoProvider;
- private final TbQueueCoreSettings coreSettings;
- private final TbQueueRuleEngineSettings ruleEngineSettings;
- private final TbQueueTransportApiSettings transportApiSettings;
- private final TbQueueTransportNotificationSettings transportNotificationSettings;
- private final TopicService topicService;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin ruleEngineAdmin;
- private final TbQueueAdmin transportApiAdmin;
- private final TbQueueAdmin notificationAdmin;
-
- public PubSubTransportQueueFactory(TbPubSubSettings pubSubSettings,
- TbServiceInfoProvider serviceInfoProvider,
- TbQueueCoreSettings coreSettings,
- TbQueueRuleEngineSettings ruleEngineSettings,
- TbQueueTransportApiSettings transportApiSettings,
- TbQueueTransportNotificationSettings transportNotificationSettings,
- TbPubSubSubscriptionSettings pubSubSubscriptionSettings,
- TopicService topicService) {
- this.pubSubSettings = pubSubSettings;
- this.serviceInfoProvider = serviceInfoProvider;
- this.coreSettings = coreSettings;
- this.ruleEngineSettings = ruleEngineSettings;
- this.transportApiSettings = transportApiSettings;
- this.transportNotificationSettings = transportNotificationSettings;
- this.topicService = topicService;
-
- this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings());
- this.ruleEngineAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getRuleEngineSettings());
- this.transportApiAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getTransportApiSettings());
- this.notificationAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getNotificationsSettings());
- }
-
- @Override
- public TbQueueRequestTemplate, TbProtoQueueMsg> createTransportApiRequestTemplate() {
- TbQueueProducer> producer = new TbPubSubProducerTemplate<>(transportApiAdmin, pubSubSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()));
- TbQueueConsumer> consumer = new TbPubSubConsumerTemplate<>(transportApiAdmin, pubSubSettings,
- topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders()));
-
- DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder
- , TbProtoQueueMsg> templateBuilder = DefaultTbQueueRequestTemplate.builder();
- templateBuilder.queueAdmin(transportApiAdmin);
- templateBuilder.requestTemplate(producer);
- templateBuilder.responseTemplate(consumer);
- templateBuilder.maxPendingRequests(transportApiSettings.getMaxPendingRequests());
- templateBuilder.maxRequestTimeout(transportApiSettings.getMaxRequestsTimeout());
- templateBuilder.pollInterval(transportApiSettings.getResponsePollInterval());
- return templateBuilder.build();
- }
-
- @Override
- public TbQueueProducer> createRuleEngineMsgProducer() {
- return new TbPubSubProducerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreNotificationsMsgProducer() {
- return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueConsumer> createTransportNotificationsConsumer() {
- return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings,
- topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createToUsageStatsServiceMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperMsgProducer() {
- return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()));
- }
-
- @PreDestroy
- private void destroy() {
- if (coreAdmin != null) {
- coreAdmin.destroy();
- }
- if (ruleEngineAdmin != null) {
- ruleEngineAdmin.destroy();
- }
- if (transportApiAdmin != null) {
- transportApiAdmin.destroy();
- }
- if (notificationAdmin != null) {
- notificationAdmin.destroy();
- }
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqMonolithQueueFactory.java
deleted file mode 100644
index 3c59923def..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqMonolithQueueFactory.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import com.google.protobuf.util.JsonFormat;
-import jakarta.annotation.PreDestroy;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.common.data.queue.Queue;
-import org.thingsboard.server.common.msg.queue.ServiceType;
-import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsRequest;
-import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsResponse;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeEventNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
-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.TbQueueProducer;
-import org.thingsboard.server.queue.TbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.TbProtoJsQueueMsg;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TbServiceInfoProvider;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqProducerTemplate;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqQueueArguments;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqSettings;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueEdgeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings;
-import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings;
-
-import java.nio.charset.StandardCharsets;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='rabbitmq' && '${service.type:null}'=='monolith'")
-public class RabbitMqMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory {
-
- private final TopicService topicService;
- private final TbQueueCoreSettings coreSettings;
- private final TbServiceInfoProvider serviceInfoProvider;
- private final TbQueueRuleEngineSettings ruleEngineSettings;
- private final TbQueueTransportApiSettings transportApiSettings;
- private final TbQueueTransportNotificationSettings transportNotificationSettings;
- private final TbRabbitMqSettings rabbitMqSettings;
- private final TbQueueRemoteJsInvokeSettings jsInvokeSettings;
- private final TbQueueVersionControlSettings vcSettings;
- private final TbQueueEdgeSettings edgeSettings;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin ruleEngineAdmin;
- private final TbQueueAdmin jsExecutorAdmin;
- private final TbQueueAdmin transportApiAdmin;
- private final TbQueueAdmin notificationAdmin;
- private final TbQueueAdmin vcAdmin;
- private final TbQueueAdmin edgeAdmin;
-
- public RabbitMqMonolithQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings,
- TbQueueRuleEngineSettings ruleEngineSettings,
- TbServiceInfoProvider serviceInfoProvider,
- TbQueueTransportApiSettings transportApiSettings,
- TbQueueTransportNotificationSettings transportNotificationSettings,
- TbRabbitMqSettings rabbitMqSettings,
- TbRabbitMqQueueArguments queueArguments,
- TbQueueRemoteJsInvokeSettings jsInvokeSettings,
- TbQueueVersionControlSettings vcSettings,
- TbQueueEdgeSettings edgeSettings) {
- this.topicService = topicService;
- this.coreSettings = coreSettings;
- this.serviceInfoProvider = serviceInfoProvider;
- this.ruleEngineSettings = ruleEngineSettings;
- this.transportApiSettings = transportApiSettings;
- this.transportNotificationSettings = transportNotificationSettings;
- this.rabbitMqSettings = rabbitMqSettings;
- this.jsInvokeSettings = jsInvokeSettings;
- this.vcSettings = vcSettings;
- this.edgeSettings = edgeSettings;
-
- this.coreAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getCoreArgs());
- this.ruleEngineAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getRuleEngineArgs());
- this.jsExecutorAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getJsExecutorArgs());
- this.transportApiAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getTransportApiArgs());
- this.notificationAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getNotificationsArgs());
- this.vcAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getVcArgs());
- this.edgeAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getEdgeArgs());
- }
-
- @Override
- public TbQueueProducer> createTransportNotificationsMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineNotificationsMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createTbCoreNotificationsMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings,
- topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName());
- }
-
- @Override
- public TbQueueConsumer> createToVersionControlMsgConsumer() {
- return new TbRabbitMqConsumerTemplate<>(vcAdmin, rabbitMqSettings, topicService.buildTopicName(vcSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders())
- );
- }
-
- @Override
- public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) {
- return new TbRabbitMqConsumerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(configuration.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() {
- return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings,
- topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToCoreMsgConsumer() {
- return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToCoreNotificationsMsgConsumer() {
- return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings,
- topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createTransportApiRequestConsumer() {
- return new TbRabbitMqConsumerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createTransportApiResponseProducer() {
- return new TbRabbitMqProducerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic()));
- }
-
- @Override
- @Bean
- public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() {
- TbQueueProducer> producer = new TbRabbitMqProducerTemplate<>(jsExecutorAdmin, rabbitMqSettings, jsInvokeSettings.getRequestTopic());
- TbQueueConsumer> consumer = new TbRabbitMqConsumerTemplate<>(jsExecutorAdmin, rabbitMqSettings,
- jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(),
- msg -> {
- RemoteJsResponse.Builder builder = RemoteJsResponse.newBuilder();
- JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder);
- return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders());
- });
-
- DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder
- , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder();
- builder.queueAdmin(jsExecutorAdmin);
- builder.requestTemplate(producer);
- builder.responseTemplate(consumer);
- builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests());
- builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout());
- builder.pollInterval(jsInvokeSettings.getResponsePollInterval());
- return builder.build();
- }
-
- @Override
- public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() {
- return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() {
- return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()));
- }
-
- @Override
- public TbQueueProducer> createToUsageStatsServiceMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()));
- }
-
- @Override
- public TbQueueProducer> createVersionControlMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(vcAdmin, rabbitMqSettings, topicService.buildTopicName(vcSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()));
- }
-
- @Override
- public TbQueueConsumer> createHousekeeperMsgConsumer() {
- return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createHousekeeperReprocessingMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()));
- }
-
- @Override
- public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() {
- return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueConsumer> createEdgeMsgConsumer() {
- return new TbRabbitMqConsumerTemplate<>(edgeAdmin, rabbitMqSettings, topicService.buildTopicName(edgeSettings.getTopic()),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createEdgeMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(edgeAdmin, rabbitMqSettings, topicService.buildTopicName(edgeSettings.getTopic()));
- }
-
- @Override
- public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() {
- return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings,
- topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(),
- msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
- }
-
- @Override
- public TbQueueProducer> createEdgeNotificationsMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings,
- topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName());
- }
-
- @Override
- public TbQueueProducer> createEdgeEventMsgProducer() {
- return null;
- }
-
- @PreDestroy
- private void destroy() {
- if (coreAdmin != null) {
- coreAdmin.destroy();
- }
- if (ruleEngineAdmin != null) {
- ruleEngineAdmin.destroy();
- }
- if (jsExecutorAdmin != null) {
- jsExecutorAdmin.destroy();
- }
- if (transportApiAdmin != null) {
- transportApiAdmin.destroy();
- }
- if (notificationAdmin != null) {
- notificationAdmin.destroy();
- }
- if (vcAdmin != null) {
- vcAdmin.destroy();
- }
- if (edgeAdmin != null) {
- edgeAdmin.destroy();
- }
- }
-}
diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbCoreQueueFactory.java
deleted file mode 100644
index 16f9838384..0000000000
--- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbCoreQueueFactory.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/**
- * Copyright © 2016-2024 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.queue.provider;
-
-import com.google.protobuf.util.JsonFormat;
-import jakarta.annotation.PreDestroy;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.common.msg.queue.ServiceType;
-import org.thingsboard.server.gen.js.JsInvokeProtos;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg;
-import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
-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.TbQueueProducer;
-import org.thingsboard.server.queue.TbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate;
-import org.thingsboard.server.queue.common.TbProtoJsQueueMsg;
-import org.thingsboard.server.queue.common.TbProtoQueueMsg;
-import org.thingsboard.server.queue.discovery.TbServiceInfoProvider;
-import org.thingsboard.server.queue.discovery.TopicService;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqProducerTemplate;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqQueueArguments;
-import org.thingsboard.server.queue.rabbitmq.TbRabbitMqSettings;
-import org.thingsboard.server.queue.settings.TbQueueCoreSettings;
-import org.thingsboard.server.queue.settings.TbQueueEdgeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings;
-import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings;
-import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings;
-
-import java.nio.charset.StandardCharsets;
-
-@Component
-@ConditionalOnExpression("'${queue.type:null}'=='rabbitmq' && '${service.type:null}'=='tb-core'")
-public class RabbitMqTbCoreQueueFactory implements TbCoreQueueFactory {
-
- private final TbRabbitMqSettings rabbitMqSettings;
- private final TbQueueRuleEngineSettings ruleEngineSettings;
- private final TbQueueCoreSettings coreSettings;
- private final TbQueueTransportApiSettings transportApiSettings;
- private final TopicService topicService;
- private final TbServiceInfoProvider serviceInfoProvider;
- private final TbQueueRemoteJsInvokeSettings jsInvokeSettings;
- private final TbQueueTransportNotificationSettings transportNotificationSettings;
- private final TbQueueEdgeSettings edgeSettings;
-
- private final TbQueueAdmin coreAdmin;
- private final TbQueueAdmin ruleEngineAdmin;
- private final TbQueueAdmin jsExecutorAdmin;
- private final TbQueueAdmin transportApiAdmin;
- private final TbQueueAdmin notificationAdmin;
- private final TbQueueAdmin edgeAdmin;
-
- public RabbitMqTbCoreQueueFactory(TbRabbitMqSettings rabbitMqSettings,
- TbQueueCoreSettings coreSettings,
- TbQueueTransportApiSettings transportApiSettings,
- TbQueueRuleEngineSettings ruleEngineSettings,
- TopicService topicService,
- TbServiceInfoProvider serviceInfoProvider,
- TbQueueRemoteJsInvokeSettings jsInvokeSettings,
- TbQueueTransportNotificationSettings transportNotificationSettings,
- TbQueueEdgeSettings edgeSettings,
- TbRabbitMqQueueArguments queueArguments) {
- this.rabbitMqSettings = rabbitMqSettings;
- this.coreSettings = coreSettings;
- this.transportApiSettings = transportApiSettings;
- this.ruleEngineSettings = ruleEngineSettings;
- this.topicService = topicService;
- this.serviceInfoProvider = serviceInfoProvider;
- this.jsInvokeSettings = jsInvokeSettings;
- this.transportNotificationSettings = transportNotificationSettings;
- this.edgeSettings = edgeSettings;
-
- this.coreAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getCoreArgs());
- this.ruleEngineAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getRuleEngineArgs());
- this.jsExecutorAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getJsExecutorArgs());
- this.transportApiAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getTransportApiArgs());
- this.notificationAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getNotificationsArgs());
- this.edgeAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getEdgeArgs());
- }
-
- @Override
- public TbQueueProducer> createTransportNotificationsMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer> createRuleEngineNotificationsMsgProducer() {
- return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic()));
- }
-
- @Override
- public TbQueueProducer