Commit c7b428fbc75fd8315bd7a4b2a60e552d325313af
Merge branch 'develop/2.5' of github.com:thingsboard/thingsboard into develop/2.5
Showing
28 changed files
with
975 additions
and
95 deletions
@@ -517,7 +517,7 @@ swagger: | @@ -517,7 +517,7 @@ swagger: | ||
517 | version: "${SWAGGER_VERSION:2.0}" | 517 | version: "${SWAGGER_VERSION:2.0}" |
518 | 518 | ||
519 | queue: | 519 | queue: |
520 | - type: "${TB_QUEUE_TYPE:in-memory}" # kafka or in-memory or aws-sqs or pubsub | 520 | + type: "${TB_QUEUE_TYPE:in-memory}" # kafka or in-memory or aws-sqs or pubsub or service-bus |
521 | kafka: | 521 | kafka: |
522 | bootstrap.servers: "${TB_KAFKA_SERVERS:localhost:9092}" | 522 | bootstrap.servers: "${TB_KAFKA_SERVERS:localhost:9092}" |
523 | acks: "${TB_KAFKA_ACKS:all}" | 523 | acks: "${TB_KAFKA_ACKS:all}" |
@@ -537,6 +537,11 @@ queue: | @@ -537,6 +537,11 @@ queue: | ||
537 | ack_deadline: "${TB_QUEUE_PUBSUB_ACK_DEADLINE:30}" #In seconds. If messages wont commit in this time, messages will poll again | 537 | ack_deadline: "${TB_QUEUE_PUBSUB_ACK_DEADLINE:30}" #In seconds. If messages wont commit in this time, messages will poll again |
538 | max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}" #in bytes | 538 | max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}" #in bytes |
539 | max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}" | 539 | max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}" |
540 | + service_bus: | ||
541 | + namespace_name: "${TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME:YOUR_NAMESPACE_NAME}" | ||
542 | + sas_key_name: "${TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME:YOUR_SAS_KEY_NAME}" | ||
543 | + sas_key: "${TB_QUEUE_SERVICE_BUS_SAS_KEY:YOUR_SAS_KEY}" | ||
544 | + max_messages: "${TB_QUEUE_SERVICE_BUS_MAX_MESSAGES:1000}" | ||
540 | partitions: | 545 | partitions: |
541 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" | 546 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" |
542 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" | 547 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" |
@@ -61,6 +61,10 @@ | @@ -61,6 +61,10 @@ | ||
61 | <artifactId>google-cloud-pubsub</artifactId> | 61 | <artifactId>google-cloud-pubsub</artifactId> |
62 | </dependency> | 62 | </dependency> |
63 | <dependency> | 63 | <dependency> |
64 | + <groupId>com.microsoft.azure</groupId> | ||
65 | + <artifactId>azure-servicebus</artifactId> | ||
66 | + </dependency> | ||
67 | + <dependency> | ||
64 | <groupId>org.springframework</groupId> | 68 | <groupId>org.springframework</groupId> |
65 | <artifactId>spring-context-support</artifactId> | 69 | <artifactId>spring-context-support</artifactId> |
66 | </dependency> | 70 | </dependency> |
common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusAdmin.java
0 → 100644
1 | +/** | ||
2 | + * Copyright © 2016-2020 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.queue.azure.servicebus; | ||
17 | + | ||
18 | +import com.microsoft.azure.servicebus.management.ManagementClient; | ||
19 | +import com.microsoft.azure.servicebus.primitives.ConnectionStringBuilder; | ||
20 | +import com.microsoft.azure.servicebus.primitives.ServiceBusException; | ||
21 | +import lombok.extern.slf4j.Slf4j; | ||
22 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | ||
23 | +import org.springframework.stereotype.Component; | ||
24 | +import org.thingsboard.server.queue.TbQueueAdmin; | ||
25 | + | ||
26 | +import javax.annotation.PreDestroy; | ||
27 | +import java.io.IOException; | ||
28 | +import java.util.Set; | ||
29 | +import java.util.concurrent.ConcurrentHashMap; | ||
30 | + | ||
31 | +@Slf4j | ||
32 | +@Component | ||
33 | +@ConditionalOnExpression("'${queue.type:null}'=='service-bus'") | ||
34 | +public class TbServiceBusAdmin implements TbQueueAdmin { | ||
35 | + | ||
36 | + private final Set<String> queues = ConcurrentHashMap.newKeySet(); | ||
37 | + | ||
38 | + private final ManagementClient client; | ||
39 | + | ||
40 | + public TbServiceBusAdmin(TbServiceBusSettings serviceBusSettings) { | ||
41 | + ConnectionStringBuilder builder = new ConnectionStringBuilder( | ||
42 | + serviceBusSettings.getNamespaceName(), | ||
43 | + "queues", | ||
44 | + serviceBusSettings.getSasKeyName(), | ||
45 | + serviceBusSettings.getSasKey()); | ||
46 | + | ||
47 | + client = new ManagementClient(builder); | ||
48 | + | ||
49 | + try { | ||
50 | + client.getQueues().forEach(queueDescription -> queues.add(queueDescription.getPath())); | ||
51 | + } catch (ServiceBusException | InterruptedException e) { | ||
52 | + log.error("Failed to get queues.", e); | ||
53 | + throw new RuntimeException("Failed to get queues.", e); | ||
54 | + } | ||
55 | + } | ||
56 | + | ||
57 | + @Override | ||
58 | + public void createTopicIfNotExists(String topic) { | ||
59 | + if (queues.contains(topic)) { | ||
60 | + return; | ||
61 | + } | ||
62 | + | ||
63 | + try { | ||
64 | + client.createQueue(topic); | ||
65 | + queues.add(topic); | ||
66 | + } catch (ServiceBusException | InterruptedException e) { | ||
67 | + log.error("Failed to create queue: [{}]", topic, e); | ||
68 | + } | ||
69 | + } | ||
70 | + | ||
71 | + @PreDestroy | ||
72 | + private void destroy() { | ||
73 | + try { | ||
74 | + client.close(); | ||
75 | + } catch (IOException e) { | ||
76 | + log.error("Failed to close ManagementClient."); | ||
77 | + } | ||
78 | + } | ||
79 | +} |
1 | +/** | ||
2 | + * Copyright © 2016-2020 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.queue.azure.servicebus; | ||
17 | + | ||
18 | +import com.google.gson.Gson; | ||
19 | +import com.google.protobuf.InvalidProtocolBufferException; | ||
20 | +import com.microsoft.azure.servicebus.TransactionContext; | ||
21 | +import com.microsoft.azure.servicebus.primitives.ConnectionStringBuilder; | ||
22 | +import com.microsoft.azure.servicebus.primitives.CoreMessageReceiver; | ||
23 | +import com.microsoft.azure.servicebus.primitives.MessageWithDeliveryTag; | ||
24 | +import com.microsoft.azure.servicebus.primitives.MessagingEntityType; | ||
25 | +import com.microsoft.azure.servicebus.primitives.MessagingFactory; | ||
26 | +import com.microsoft.azure.servicebus.primitives.SettleModePair; | ||
27 | +import lombok.extern.slf4j.Slf4j; | ||
28 | +import org.apache.qpid.proton.amqp.messaging.Data; | ||
29 | +import org.apache.qpid.proton.amqp.transport.ReceiverSettleMode; | ||
30 | +import org.apache.qpid.proton.amqp.transport.SenderSettleMode; | ||
31 | +import org.springframework.util.CollectionUtils; | ||
32 | +import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; | ||
33 | +import org.thingsboard.server.queue.TbQueueAdmin; | ||
34 | +import org.thingsboard.server.queue.TbQueueConsumer; | ||
35 | +import org.thingsboard.server.queue.TbQueueMsg; | ||
36 | +import org.thingsboard.server.queue.TbQueueMsgDecoder; | ||
37 | +import org.thingsboard.server.queue.common.DefaultTbQueueMsg; | ||
38 | + | ||
39 | +import java.time.Duration; | ||
40 | +import java.util.Collection; | ||
41 | +import java.util.Collections; | ||
42 | +import java.util.HashSet; | ||
43 | +import java.util.List; | ||
44 | +import java.util.Map; | ||
45 | +import java.util.Set; | ||
46 | +import java.util.concurrent.CompletableFuture; | ||
47 | +import java.util.concurrent.ConcurrentHashMap; | ||
48 | +import java.util.concurrent.ExecutionException; | ||
49 | +import java.util.stream.Collectors; | ||
50 | +import java.util.stream.Stream; | ||
51 | + | ||
52 | +@Slf4j | ||
53 | +public class TbServiceBusConsumerTemplate<T extends TbQueueMsg> implements TbQueueConsumer<T> { | ||
54 | + private final TbQueueAdmin admin; | ||
55 | + private final String topic; | ||
56 | + private final TbQueueMsgDecoder<T> decoder; | ||
57 | + private final TbServiceBusSettings serviceBusSettings; | ||
58 | + | ||
59 | + private final Gson gson = new Gson(); | ||
60 | + | ||
61 | + private Set<CoreMessageReceiver> receivers; | ||
62 | + private volatile Set<TopicPartitionInfo> partitions; | ||
63 | + private volatile boolean subscribed; | ||
64 | + private volatile boolean stopped = false; | ||
65 | + private Map<CoreMessageReceiver, Collection<MessageWithDeliveryTag>> pendingMessages = new ConcurrentHashMap<>(); | ||
66 | + private volatile int messagesPerQueue; | ||
67 | + | ||
68 | + public TbServiceBusConsumerTemplate(TbQueueAdmin admin, TbServiceBusSettings serviceBusSettings, String topic, TbQueueMsgDecoder<T> decoder) { | ||
69 | + this.admin = admin; | ||
70 | + this.decoder = decoder; | ||
71 | + this.topic = topic; | ||
72 | + this.serviceBusSettings = serviceBusSettings; | ||
73 | + } | ||
74 | + | ||
75 | + @Override | ||
76 | + public String getTopic() { | ||
77 | + return topic; | ||
78 | + } | ||
79 | + | ||
80 | + @Override | ||
81 | + public void subscribe() { | ||
82 | + partitions = Collections.singleton(new TopicPartitionInfo(topic, null, null, true)); | ||
83 | + subscribed = false; | ||
84 | + } | ||
85 | + | ||
86 | + @Override | ||
87 | + public void subscribe(Set<TopicPartitionInfo> partitions) { | ||
88 | + this.partitions = partitions; | ||
89 | + subscribed = false; | ||
90 | + } | ||
91 | + | ||
92 | + @Override | ||
93 | + public void unsubscribe() { | ||
94 | + stopped = true; | ||
95 | + receivers.forEach(CoreMessageReceiver::closeAsync); | ||
96 | + } | ||
97 | + | ||
98 | + @Override | ||
99 | + public List<T> poll(long durationInMillis) { | ||
100 | + if (!subscribed && partitions == null) { | ||
101 | + try { | ||
102 | + Thread.sleep(durationInMillis); | ||
103 | + } catch (InterruptedException e) { | ||
104 | + log.debug("Failed to await subscription", e); | ||
105 | + } | ||
106 | + } else { | ||
107 | + if (!subscribed) { | ||
108 | + createReceivers(); | ||
109 | + messagesPerQueue = receivers.size() / partitions.size(); | ||
110 | + subscribed = true; | ||
111 | + } | ||
112 | + | ||
113 | + List<CompletableFuture<Collection<MessageWithDeliveryTag>>> messageFutures = | ||
114 | + receivers.stream() | ||
115 | + .map(receiver -> receiver | ||
116 | + .receiveAsync(messagesPerQueue, Duration.ofMillis(durationInMillis)) | ||
117 | + .whenComplete((messages, err) -> { | ||
118 | + if (!CollectionUtils.isEmpty(messages)) { | ||
119 | + pendingMessages.put(receiver, messages); | ||
120 | + } else if (err != null) { | ||
121 | + log.error("Failed to receive messages.", err); | ||
122 | + } | ||
123 | + })) | ||
124 | + .collect(Collectors.toList()); | ||
125 | + try { | ||
126 | + return fromList(messageFutures) | ||
127 | + .get() | ||
128 | + .stream() | ||
129 | + .flatMap(messages -> CollectionUtils.isEmpty(messages) ? Stream.empty() : messages.stream()) | ||
130 | + .map(message -> { | ||
131 | + try { | ||
132 | + return decode(message); | ||
133 | + } catch (InvalidProtocolBufferException e) { | ||
134 | + log.error("Failed to parse message.", e); | ||
135 | + throw new RuntimeException("Failed to parse message.", e); | ||
136 | + } | ||
137 | + }).collect(Collectors.toList()); | ||
138 | + } catch (InterruptedException | ExecutionException e) { | ||
139 | + if (stopped) { | ||
140 | + log.info("[{}] Service Bus consumer is stopped.", topic); | ||
141 | + } else { | ||
142 | + log.error("Failed to receive messages", e); | ||
143 | + } | ||
144 | + } | ||
145 | + } | ||
146 | + return Collections.emptyList(); | ||
147 | + } | ||
148 | + | ||
149 | + private void createReceivers() { | ||
150 | + List<CompletableFuture<CoreMessageReceiver>> receiverFutures = partitions.stream() | ||
151 | + .map(TopicPartitionInfo::getFullTopicName) | ||
152 | + .map(queue -> { | ||
153 | + MessagingFactory factory; | ||
154 | + try { | ||
155 | + factory = MessagingFactory.createFromConnectionStringBuilder(createConnection(queue)); | ||
156 | + } catch (InterruptedException | ExecutionException e) { | ||
157 | + log.error("Failed to create factory for the queue [{}]", queue); | ||
158 | + throw new RuntimeException("Failed to create the factory", e); | ||
159 | + } | ||
160 | + | ||
161 | + return CoreMessageReceiver.create(factory, queue, queue, 0, | ||
162 | + new SettleModePair(SenderSettleMode.UNSETTLED, ReceiverSettleMode.SECOND), | ||
163 | + MessagingEntityType.QUEUE); | ||
164 | + }).collect(Collectors.toList()); | ||
165 | + | ||
166 | + try { | ||
167 | + receivers = new HashSet<>(fromList(receiverFutures).get()); | ||
168 | + } catch (InterruptedException | ExecutionException e) { | ||
169 | + if (stopped) { | ||
170 | + log.info("[{}] Service Bus consumer is stopped.", topic); | ||
171 | + } else { | ||
172 | + log.error("Failed to create receivers", e); | ||
173 | + } | ||
174 | + } | ||
175 | + } | ||
176 | + | ||
177 | + private ConnectionStringBuilder createConnection(String queue) { | ||
178 | + admin.createTopicIfNotExists(queue); | ||
179 | + return new ConnectionStringBuilder( | ||
180 | + serviceBusSettings.getNamespaceName(), | ||
181 | + queue, | ||
182 | + serviceBusSettings.getSasKeyName(), | ||
183 | + serviceBusSettings.getSasKey()); | ||
184 | + } | ||
185 | + | ||
186 | + private <V> CompletableFuture<List<V>> fromList(List<CompletableFuture<V>> futures) { | ||
187 | + CompletableFuture<Collection<V>>[] arrayFuture = new CompletableFuture[futures.size()]; | ||
188 | + futures.toArray(arrayFuture); | ||
189 | + | ||
190 | + return CompletableFuture | ||
191 | + .allOf(arrayFuture) | ||
192 | + .thenApply(v -> futures | ||
193 | + .stream() | ||
194 | + .map(CompletableFuture::join) | ||
195 | + .collect(Collectors.toList())); | ||
196 | + } | ||
197 | + | ||
198 | + @Override | ||
199 | + public void commit() { | ||
200 | + pendingMessages.forEach((receiver, msgs) -> | ||
201 | + msgs.forEach(msg -> receiver.completeMessageAsync(msg.getDeliveryTag(), TransactionContext.NULL_TXN))); | ||
202 | + pendingMessages.clear(); | ||
203 | + } | ||
204 | + | ||
205 | + private T decode(MessageWithDeliveryTag data) throws InvalidProtocolBufferException { | ||
206 | + DefaultTbQueueMsg msg = gson.fromJson(new String(((Data) data.getMessage().getBody()).getValue().getArray()), DefaultTbQueueMsg.class); | ||
207 | + return decoder.decode(msg); | ||
208 | + } | ||
209 | + | ||
210 | +} |
1 | +/** | ||
2 | + * Copyright © 2016-2020 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.queue.azure.servicebus; | ||
17 | + | ||
18 | +import com.google.gson.Gson; | ||
19 | +import com.microsoft.azure.servicebus.IMessage; | ||
20 | +import com.microsoft.azure.servicebus.Message; | ||
21 | +import com.microsoft.azure.servicebus.QueueClient; | ||
22 | +import com.microsoft.azure.servicebus.ReceiveMode; | ||
23 | +import com.microsoft.azure.servicebus.primitives.ConnectionStringBuilder; | ||
24 | +import com.microsoft.azure.servicebus.primitives.ServiceBusException; | ||
25 | +import lombok.extern.slf4j.Slf4j; | ||
26 | +import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; | ||
27 | +import org.thingsboard.server.queue.TbQueueAdmin; | ||
28 | +import org.thingsboard.server.queue.TbQueueCallback; | ||
29 | +import org.thingsboard.server.queue.TbQueueMsg; | ||
30 | +import org.thingsboard.server.queue.TbQueueProducer; | ||
31 | +import org.thingsboard.server.queue.common.DefaultTbQueueMsg; | ||
32 | + | ||
33 | +import java.util.HashMap; | ||
34 | +import java.util.Map; | ||
35 | +import java.util.concurrent.CompletableFuture; | ||
36 | +import java.util.concurrent.ExecutorService; | ||
37 | +import java.util.concurrent.Executors; | ||
38 | + | ||
39 | +@Slf4j | ||
40 | +public class TbServiceBusProducerTemplate<T extends TbQueueMsg> implements TbQueueProducer<T> { | ||
41 | + private final String defaultTopic; | ||
42 | + private final Gson gson = new Gson(); | ||
43 | + private final TbQueueAdmin admin; | ||
44 | + private final TbServiceBusSettings serviceBusSettings; | ||
45 | + private final Map<String, QueueClient> clients = new HashMap<>(); | ||
46 | + private ExecutorService executorService; | ||
47 | + | ||
48 | + public TbServiceBusProducerTemplate(TbQueueAdmin admin, TbServiceBusSettings serviceBusSettings, String defaultTopic) { | ||
49 | + this.admin = admin; | ||
50 | + this.defaultTopic = defaultTopic; | ||
51 | + this.serviceBusSettings = serviceBusSettings; | ||
52 | + executorService = Executors.newSingleThreadExecutor(); | ||
53 | + } | ||
54 | + | ||
55 | + @Override | ||
56 | + public void init() { | ||
57 | + | ||
58 | + } | ||
59 | + | ||
60 | + @Override | ||
61 | + public String getDefaultTopic() { | ||
62 | + return defaultTopic; | ||
63 | + } | ||
64 | + | ||
65 | + @Override | ||
66 | + public void send(TopicPartitionInfo tpi, T msg, TbQueueCallback callback) { | ||
67 | + IMessage message = new Message(gson.toJson(new DefaultTbQueueMsg(msg))); | ||
68 | + CompletableFuture<Void> future = getClient(tpi.getFullTopicName()).sendAsync(message); | ||
69 | + future.whenCompleteAsync((success, err) -> { | ||
70 | + if (err != null) { | ||
71 | + callback.onFailure(err); | ||
72 | + } else { | ||
73 | + callback.onSuccess(null); | ||
74 | + } | ||
75 | + }, executorService); | ||
76 | + } | ||
77 | + | ||
78 | + @Override | ||
79 | + public void stop() { | ||
80 | + clients.forEach((t, client) -> { | ||
81 | + try { | ||
82 | + client.close(); | ||
83 | + } catch (ServiceBusException e) { | ||
84 | + log.error("Failed to close QueueClient.", e); | ||
85 | + } | ||
86 | + }); | ||
87 | + | ||
88 | + if (executorService != null) { | ||
89 | + executorService.shutdownNow(); | ||
90 | + } | ||
91 | + } | ||
92 | + | ||
93 | + private QueueClient getClient(String topic) { | ||
94 | + return clients.computeIfAbsent(topic, k -> { | ||
95 | + admin.createTopicIfNotExists(topic); | ||
96 | + ConnectionStringBuilder builder = | ||
97 | + new ConnectionStringBuilder( | ||
98 | + serviceBusSettings.getNamespaceName(), | ||
99 | + topic, | ||
100 | + serviceBusSettings.getSasKeyName(), | ||
101 | + serviceBusSettings.getSasKey()); | ||
102 | + try { | ||
103 | + return new QueueClient(builder, ReceiveMode.PEEKLOCK); | ||
104 | + } catch (InterruptedException | ServiceBusException e) { | ||
105 | + log.error("Failed to create new client for the Queue: [{}]", topic, e); | ||
106 | + throw new RuntimeException("Failed to create new client for the Queue", e); | ||
107 | + } | ||
108 | + }); | ||
109 | + } | ||
110 | +} |
common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusSettings.java
0 → 100644
1 | +/** | ||
2 | + * Copyright © 2016-2020 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.queue.azure.servicebus; | ||
17 | + | ||
18 | +import lombok.Data; | ||
19 | +import lombok.extern.slf4j.Slf4j; | ||
20 | +import org.springframework.beans.factory.annotation.Value; | ||
21 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | ||
22 | +import org.springframework.stereotype.Component; | ||
23 | + | ||
24 | +@Slf4j | ||
25 | +@ConditionalOnExpression("'${queue.type:null}'=='service-bus'") | ||
26 | +@Component | ||
27 | +@Data | ||
28 | +public class TbServiceBusSettings { | ||
29 | + @Value("${queue.service_bus.namespace_name}") | ||
30 | + private String namespaceName; | ||
31 | + @Value("${queue.service_bus.sas_key_name}") | ||
32 | + private String sasKeyName; | ||
33 | + @Value("${queue.service_bus.sas_key}") | ||
34 | + private String sasKey; | ||
35 | + @Value("${queue.service_bus.max_messages}") | ||
36 | + private int maxMessages; | ||
37 | +} |
@@ -15,7 +15,6 @@ | @@ -15,7 +15,6 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.queue.common; | 16 | package org.thingsboard.server.queue.common; |
17 | 17 | ||
18 | -import com.google.gson.annotations.Expose; | ||
19 | import lombok.Data; | 18 | import lombok.Data; |
20 | import org.thingsboard.server.queue.TbQueueMsg; | 19 | import org.thingsboard.server.queue.TbQueueMsg; |
21 | import org.thingsboard.server.queue.TbQueueMsgHeaders; | 20 | import org.thingsboard.server.queue.TbQueueMsgHeaders; |
@@ -26,12 +25,20 @@ import java.util.UUID; | @@ -26,12 +25,20 @@ import java.util.UUID; | ||
26 | public class DefaultTbQueueMsg implements TbQueueMsg { | 25 | public class DefaultTbQueueMsg implements TbQueueMsg { |
27 | private final UUID key; | 26 | private final UUID key; |
28 | private final byte[] data; | 27 | private final byte[] data; |
28 | + private DefaultTbQueueMsgHeaders headers; | ||
29 | + | ||
29 | 30 | ||
30 | public DefaultTbQueueMsg(UUID key, byte[] data) { | 31 | public DefaultTbQueueMsg(UUID key, byte[] data) { |
31 | this.key = key; | 32 | this.key = key; |
32 | this.data = data; | 33 | this.data = data; |
33 | } | 34 | } |
34 | 35 | ||
35 | - @Expose(serialize = false, deserialize = false) | ||
36 | - private TbQueueMsgHeaders headers; | 36 | + public DefaultTbQueueMsg(TbQueueMsg msg) { |
37 | + this.key = msg.getKey(); | ||
38 | + this.data = msg.getData(); | ||
39 | + DefaultTbQueueMsgHeaders headers = new DefaultTbQueueMsgHeaders(); | ||
40 | + msg.getHeaders().getData().forEach(headers::put); | ||
41 | + this.headers = headers; | ||
42 | + } | ||
43 | + | ||
37 | } | 44 | } |
@@ -36,7 +36,6 @@ import java.nio.charset.StandardCharsets; | @@ -36,7 +36,6 @@ import java.nio.charset.StandardCharsets; | ||
36 | import java.util.ArrayList; | 36 | import java.util.ArrayList; |
37 | import java.util.HashMap; | 37 | import java.util.HashMap; |
38 | import java.util.HashSet; | 38 | import java.util.HashSet; |
39 | -import java.util.LinkedHashSet; | ||
40 | import java.util.List; | 39 | import java.util.List; |
41 | import java.util.Map; | 40 | import java.util.Map; |
42 | import java.util.Set; | 41 | import java.util.Set; |
@@ -21,14 +21,14 @@ import org.thingsboard.server.common.msg.queue.ServiceType; | @@ -21,14 +21,14 @@ import org.thingsboard.server.common.msg.queue.ServiceType; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos; | 21 | import org.thingsboard.server.gen.transport.TransportProtos; |
22 | import org.thingsboard.server.queue.TbQueueAdmin; | 22 | import org.thingsboard.server.queue.TbQueueAdmin; |
23 | import org.thingsboard.server.queue.TbQueueConsumer; | 23 | import org.thingsboard.server.queue.TbQueueConsumer; |
24 | -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
25 | import org.thingsboard.server.queue.TbQueueProducer; | 24 | import org.thingsboard.server.queue.TbQueueProducer; |
26 | -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
27 | -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
28 | -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
29 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 25 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
30 | import org.thingsboard.server.queue.discovery.PartitionService; | 26 | import org.thingsboard.server.queue.discovery.PartitionService; |
31 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 27 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
28 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
29 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
30 | +import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
31 | +import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
32 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | 32 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; |
33 | import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; | 33 | import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; |
34 | import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; | 34 | import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; |
@@ -18,21 +18,22 @@ package org.thingsboard.server.queue.provider; | @@ -18,21 +18,22 @@ package org.thingsboard.server.queue.provider; | ||
18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | 18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
19 | import org.springframework.stereotype.Component; | 19 | import org.springframework.stereotype.Component; |
20 | import org.thingsboard.server.common.msg.queue.ServiceType; | 20 | import org.thingsboard.server.common.msg.queue.ServiceType; |
21 | -import org.thingsboard.server.gen.transport.TransportProtos; | ||
22 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 21 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
22 | +import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; | ||
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
24 | +import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; | ||
24 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
25 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; | 26 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; |
26 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
27 | import org.thingsboard.server.queue.TbQueueAdmin; | 28 | import org.thingsboard.server.queue.TbQueueAdmin; |
28 | import org.thingsboard.server.queue.TbQueueConsumer; | 29 | import org.thingsboard.server.queue.TbQueueConsumer; |
29 | -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
30 | import org.thingsboard.server.queue.TbQueueProducer; | 30 | import org.thingsboard.server.queue.TbQueueProducer; |
31 | -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
32 | -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
33 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 31 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
34 | import org.thingsboard.server.queue.discovery.PartitionService; | 32 | import org.thingsboard.server.queue.discovery.PartitionService; |
35 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 33 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
34 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
35 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
36 | +import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
36 | import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; | 37 | import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; |
37 | import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; | 38 | import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; |
38 | import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate; | 39 | import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate; |
@@ -48,8 +49,6 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { | @@ -48,8 +49,6 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { | ||
48 | private final TbQueueTransportApiSettings transportApiSettings; | 49 | private final TbQueueTransportApiSettings transportApiSettings; |
49 | private final PartitionService partitionService; | 50 | private final PartitionService partitionService; |
50 | private final TbServiceInfoProvider serviceInfoProvider; | 51 | private final TbServiceInfoProvider serviceInfoProvider; |
51 | - | ||
52 | - | ||
53 | private final TbQueueAdmin admin; | 52 | private final TbQueueAdmin admin; |
54 | 53 | ||
55 | public AwsSqsTbCoreQueueFactory(TbAwsSqsSettings sqsSettings, | 54 | public AwsSqsTbCoreQueueFactory(TbAwsSqsSettings sqsSettings, |
@@ -78,7 +77,7 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { | @@ -78,7 +77,7 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { | ||
78 | } | 77 | } |
79 | 78 | ||
80 | @Override | 79 | @Override |
81 | - public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToRuleEngineNotificationMsg>> createRuleEngineNotificationsMsgProducer() { | 80 | + public TbQueueProducer<TbProtoQueueMsg<ToRuleEngineNotificationMsg>> createRuleEngineNotificationsMsgProducer() { |
82 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, ruleEngineSettings.getTopic()); | 81 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, ruleEngineSettings.getTopic()); |
83 | } | 82 | } |
84 | 83 | ||
@@ -88,7 +87,7 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { | @@ -88,7 +87,7 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { | ||
88 | } | 87 | } |
89 | 88 | ||
90 | @Override | 89 | @Override |
91 | - public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToCoreNotificationMsg>> createTbCoreNotificationsMsgProducer() { | 90 | + public TbQueueProducer<TbProtoQueueMsg<ToCoreNotificationMsg>> createTbCoreNotificationsMsgProducer() { |
92 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, coreSettings.getTopic()); | 91 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, coreSettings.getTopic()); |
93 | } | 92 | } |
94 | 93 | ||
@@ -99,15 +98,16 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { | @@ -99,15 +98,16 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { | ||
99 | } | 98 | } |
100 | 99 | ||
101 | @Override | 100 | @Override |
102 | - public TbQueueConsumer<TbProtoQueueMsg<TransportProtos.ToCoreNotificationMsg>> createToCoreNotificationsMsgConsumer() { | 101 | + public TbQueueConsumer<TbProtoQueueMsg<ToCoreNotificationMsg>> createToCoreNotificationsMsgConsumer() { |
103 | return new TbAwsSqsConsumerTemplate<>(admin, sqsSettings, | 102 | return new TbAwsSqsConsumerTemplate<>(admin, sqsSettings, |
104 | partitionService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), | 103 | partitionService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), |
105 | - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); | 104 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); |
106 | } | 105 | } |
107 | 106 | ||
108 | @Override | 107 | @Override |
109 | public TbQueueConsumer<TbProtoQueueMsg<TransportApiRequestMsg>> createTransportApiRequestConsumer() { | 108 | public TbQueueConsumer<TbProtoQueueMsg<TransportApiRequestMsg>> createTransportApiRequestConsumer() { |
110 | - return new TbAwsSqsConsumerTemplate<>(admin, sqsSettings, transportApiSettings.getRequestsTopic(), msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); | 109 | + return new TbAwsSqsConsumerTemplate<>(admin, sqsSettings, transportApiSettings.getRequestsTopic(), |
110 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
111 | } | 111 | } |
112 | 112 | ||
113 | @Override | 113 | @Override |
common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java
@@ -24,12 +24,12 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | @@ -24,12 +24,12 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | ||
24 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
25 | import org.thingsboard.server.queue.TbQueueAdmin; | 25 | import org.thingsboard.server.queue.TbQueueAdmin; |
26 | import org.thingsboard.server.queue.TbQueueConsumer; | 26 | import org.thingsboard.server.queue.TbQueueConsumer; |
27 | -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
28 | import org.thingsboard.server.queue.TbQueueProducer; | 27 | import org.thingsboard.server.queue.TbQueueProducer; |
29 | -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
30 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 28 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
31 | import org.thingsboard.server.queue.discovery.PartitionService; | 29 | import org.thingsboard.server.queue.discovery.PartitionService; |
32 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 30 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
31 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
32 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
33 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | 33 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; |
34 | import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; | 34 | import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; |
35 | import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; | 35 | import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; |
@@ -86,7 +86,8 @@ public class AwsSqsTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory | @@ -86,7 +86,8 @@ public class AwsSqsTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory | ||
86 | 86 | ||
87 | @Override | 87 | @Override |
88 | public TbQueueConsumer<TbProtoQueueMsg<ToRuleEngineMsg>> createToRuleEngineMsgConsumer(TbRuleEngineQueueConfiguration configuration) { | 88 | public TbQueueConsumer<TbProtoQueueMsg<ToRuleEngineMsg>> createToRuleEngineMsgConsumer(TbRuleEngineQueueConfiguration configuration) { |
89 | - return new TbAwsSqsConsumerTemplate<>(admin, sqsSettings, ruleEngineSettings.getTopic(), msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); | 89 | + return new TbAwsSqsConsumerTemplate<>(admin, sqsSettings, ruleEngineSettings.getTopic(), |
90 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
90 | } | 91 | } |
91 | 92 | ||
92 | @Override | 93 | @Override |
@@ -18,16 +18,20 @@ package org.thingsboard.server.queue.provider; | @@ -18,16 +18,20 @@ package org.thingsboard.server.queue.provider; | ||
18 | import lombok.extern.slf4j.Slf4j; | 18 | import lombok.extern.slf4j.Slf4j; |
19 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | 19 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
20 | import org.springframework.stereotype.Component; | 20 | import org.springframework.stereotype.Component; |
21 | -import org.thingsboard.server.gen.transport.TransportProtos; | 21 | +import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
22 | +import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | ||
23 | +import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
24 | +import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; | ||
25 | +import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | ||
22 | import org.thingsboard.server.queue.TbQueueAdmin; | 26 | import org.thingsboard.server.queue.TbQueueAdmin; |
23 | import org.thingsboard.server.queue.TbQueueConsumer; | 27 | import org.thingsboard.server.queue.TbQueueConsumer; |
24 | import org.thingsboard.server.queue.TbQueueProducer; | 28 | import org.thingsboard.server.queue.TbQueueProducer; |
25 | import org.thingsboard.server.queue.TbQueueRequestTemplate; | 29 | import org.thingsboard.server.queue.TbQueueRequestTemplate; |
26 | -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
27 | -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
28 | import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; | 30 | import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; |
29 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 31 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
30 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 32 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
33 | +import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
34 | +import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
31 | import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; | 35 | import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; |
32 | import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; | 36 | import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; |
33 | import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate; | 37 | import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate; |
@@ -55,17 +59,17 @@ public class AwsSqsTransportQueueFactory implements TbTransportQueueFactory { | @@ -55,17 +59,17 @@ public class AwsSqsTransportQueueFactory implements TbTransportQueueFactory { | ||
55 | } | 59 | } |
56 | 60 | ||
57 | @Override | 61 | @Override |
58 | - public TbQueueRequestTemplate<TbProtoQueueMsg<TransportProtos.TransportApiRequestMsg>, TbProtoQueueMsg<TransportProtos.TransportApiResponseMsg>> createTransportApiRequestTemplate() { | ||
59 | - TbAwsSqsProducerTemplate<TbProtoQueueMsg<TransportProtos.TransportApiRequestMsg>> producerTemplate = | 62 | + public TbQueueRequestTemplate<TbProtoQueueMsg<TransportApiRequestMsg>, TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiRequestTemplate() { |
63 | + TbAwsSqsProducerTemplate<TbProtoQueueMsg<TransportApiRequestMsg>> producerTemplate = | ||
60 | new TbAwsSqsProducerTemplate<>(admin, sqsSettings, transportApiSettings.getRequestsTopic()); | 64 | new TbAwsSqsProducerTemplate<>(admin, sqsSettings, transportApiSettings.getRequestsTopic()); |
61 | 65 | ||
62 | - TbAwsSqsConsumerTemplate<TbProtoQueueMsg<TransportProtos.TransportApiResponseMsg>> consumerTemplate = | 66 | + TbAwsSqsConsumerTemplate<TbProtoQueueMsg<TransportApiResponseMsg>> consumerTemplate = |
63 | new TbAwsSqsConsumerTemplate<>(admin, sqsSettings, | 67 | new TbAwsSqsConsumerTemplate<>(admin, sqsSettings, |
64 | transportApiSettings.getResponsesTopic() + "_" + serviceInfoProvider.getServiceId(), | 68 | transportApiSettings.getResponsesTopic() + "_" + serviceInfoProvider.getServiceId(), |
65 | - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); | 69 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); |
66 | 70 | ||
67 | DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder | 71 | DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder |
68 | - <TbProtoQueueMsg<TransportProtos.TransportApiRequestMsg>, TbProtoQueueMsg<TransportProtos.TransportApiResponseMsg>> templateBuilder = DefaultTbQueueRequestTemplate.builder(); | 72 | + <TbProtoQueueMsg<TransportApiRequestMsg>, TbProtoQueueMsg<TransportApiResponseMsg>> templateBuilder = DefaultTbQueueRequestTemplate.builder(); |
69 | templateBuilder.queueAdmin(admin); | 73 | templateBuilder.queueAdmin(admin); |
70 | templateBuilder.requestTemplate(producerTemplate); | 74 | templateBuilder.requestTemplate(producerTemplate); |
71 | templateBuilder.responseTemplate(consumerTemplate); | 75 | templateBuilder.responseTemplate(consumerTemplate); |
@@ -76,18 +80,18 @@ public class AwsSqsTransportQueueFactory implements TbTransportQueueFactory { | @@ -76,18 +80,18 @@ public class AwsSqsTransportQueueFactory implements TbTransportQueueFactory { | ||
76 | } | 80 | } |
77 | 81 | ||
78 | @Override | 82 | @Override |
79 | - public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToRuleEngineMsg>> createRuleEngineMsgProducer() { | 83 | + public TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> createRuleEngineMsgProducer() { |
80 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, transportApiSettings.getRequestsTopic()); | 84 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, transportApiSettings.getRequestsTopic()); |
81 | } | 85 | } |
82 | 86 | ||
83 | @Override | 87 | @Override |
84 | - public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToCoreMsg>> createTbCoreMsgProducer() { | 88 | + public TbQueueProducer<TbProtoQueueMsg<ToCoreMsg>> createTbCoreMsgProducer() { |
85 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, transportApiSettings.getRequestsTopic()); | 89 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, transportApiSettings.getRequestsTopic()); |
86 | } | 90 | } |
87 | 91 | ||
88 | @Override | 92 | @Override |
89 | - public TbQueueConsumer<TbProtoQueueMsg<TransportProtos.ToTransportMsg>> createTransportNotificationsConsumer() { | 93 | + public TbQueueConsumer<TbProtoQueueMsg<ToTransportMsg>> createTransportNotificationsConsumer() { |
90 | return new TbAwsSqsConsumerTemplate<>(admin, sqsSettings, transportNotificationSettings.getNotificationsTopic() + "_" + serviceInfoProvider.getServiceId(), | 94 | return new TbAwsSqsConsumerTemplate<>(admin, sqsSettings, transportNotificationSettings.getNotificationsTopic() + "_" + serviceInfoProvider.getServiceId(), |
91 | - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); | 95 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); |
92 | } | 96 | } |
93 | } | 97 | } |
@@ -26,14 +26,14 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | @@ -26,14 +26,14 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
26 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; | 26 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; |
27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
28 | import org.thingsboard.server.queue.TbQueueConsumer; | 28 | import org.thingsboard.server.queue.TbQueueConsumer; |
29 | -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
30 | import org.thingsboard.server.queue.TbQueueProducer; | 29 | import org.thingsboard.server.queue.TbQueueProducer; |
31 | -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
32 | -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
33 | -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
34 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 30 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
35 | import org.thingsboard.server.queue.memory.InMemoryTbQueueConsumer; | 31 | import org.thingsboard.server.queue.memory.InMemoryTbQueueConsumer; |
36 | import org.thingsboard.server.queue.memory.InMemoryTbQueueProducer; | 32 | import org.thingsboard.server.queue.memory.InMemoryTbQueueProducer; |
33 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
34 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
35 | +import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
36 | +import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
37 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | 37 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; |
38 | 38 | ||
39 | @Slf4j | 39 | @Slf4j |
@@ -19,22 +19,22 @@ import com.google.common.util.concurrent.Futures; | @@ -19,22 +19,22 @@ import com.google.common.util.concurrent.Futures; | ||
19 | import lombok.extern.slf4j.Slf4j; | 19 | import lombok.extern.slf4j.Slf4j; |
20 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | 20 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
21 | import org.springframework.stereotype.Component; | 21 | import org.springframework.stereotype.Component; |
22 | -import org.thingsboard.server.queue.TbQueueConsumer; | ||
23 | -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
24 | -import org.thingsboard.server.queue.TbQueueProducer; | ||
25 | -import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
26 | -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
27 | -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
28 | -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
29 | -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; | ||
30 | -import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
31 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 22 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
32 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
33 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
34 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; | 25 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; |
35 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 26 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
27 | +import org.thingsboard.server.queue.TbQueueConsumer; | ||
28 | +import org.thingsboard.server.queue.TbQueueProducer; | ||
29 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
30 | +import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; | ||
31 | +import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
36 | import org.thingsboard.server.queue.memory.InMemoryTbQueueConsumer; | 32 | import org.thingsboard.server.queue.memory.InMemoryTbQueueConsumer; |
37 | import org.thingsboard.server.queue.memory.InMemoryTbQueueProducer; | 33 | import org.thingsboard.server.queue.memory.InMemoryTbQueueProducer; |
34 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
35 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
36 | +import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
37 | +import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
38 | 38 | ||
39 | @Component | 39 | @Component |
40 | @ConditionalOnExpression("'${queue.type:null}'=='in-memory' && ('${service.type:null}'=='monolith' || '${service.type:null}'=='tb-transport')") | 40 | @ConditionalOnExpression("'${queue.type:null}'=='in-memory' && ('${service.type:null}'=='monolith' || '${service.type:null}'=='tb-transport')") |
@@ -26,17 +26,17 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | @@ -26,17 +26,17 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
26 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; | 26 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; |
27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
28 | import org.thingsboard.server.queue.TbQueueConsumer; | 28 | import org.thingsboard.server.queue.TbQueueConsumer; |
29 | -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
30 | import org.thingsboard.server.queue.TbQueueProducer; | 29 | import org.thingsboard.server.queue.TbQueueProducer; |
31 | -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
32 | -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
33 | -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
34 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 30 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
35 | import org.thingsboard.server.queue.discovery.PartitionService; | 31 | import org.thingsboard.server.queue.discovery.PartitionService; |
36 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 32 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
37 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; | 33 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; |
38 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; | 34 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; |
39 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; | 35 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; |
36 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
37 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
38 | +import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
39 | +import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
40 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | 40 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; |
41 | 41 | ||
42 | @Component | 42 | @Component |
@@ -26,16 +26,16 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | @@ -26,16 +26,16 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
26 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; | 26 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; |
27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
28 | import org.thingsboard.server.queue.TbQueueConsumer; | 28 | import org.thingsboard.server.queue.TbQueueConsumer; |
29 | -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
30 | import org.thingsboard.server.queue.TbQueueProducer; | 29 | import org.thingsboard.server.queue.TbQueueProducer; |
31 | -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
32 | -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
33 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 30 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
34 | import org.thingsboard.server.queue.discovery.PartitionService; | 31 | import org.thingsboard.server.queue.discovery.PartitionService; |
35 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 32 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
36 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; | 33 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; |
37 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; | 34 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; |
38 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; | 35 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; |
36 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
37 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
38 | +import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
39 | 39 | ||
40 | @Component | 40 | @Component |
41 | @ConditionalOnExpression("'${queue.type:null}'=='kafka' && '${service.type:null}'=='tb-core'") | 41 | @ConditionalOnExpression("'${queue.type:null}'=='kafka' && '${service.type:null}'=='tb-core'") |
@@ -24,15 +24,15 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | @@ -24,15 +24,15 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | ||
24 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; |
25 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
26 | import org.thingsboard.server.queue.TbQueueConsumer; | 26 | import org.thingsboard.server.queue.TbQueueConsumer; |
27 | -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
28 | import org.thingsboard.server.queue.TbQueueProducer; | 27 | import org.thingsboard.server.queue.TbQueueProducer; |
29 | -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
30 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 28 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
31 | import org.thingsboard.server.queue.discovery.PartitionService; | 29 | import org.thingsboard.server.queue.discovery.PartitionService; |
32 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 30 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
33 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; | 31 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; |
34 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; | 32 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; |
35 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; | 33 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; |
34 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
35 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
36 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | 36 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; |
37 | 37 | ||
38 | @Component | 38 | @Component |
@@ -27,11 +27,7 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestM | @@ -27,11 +27,7 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestM | ||
27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
28 | import org.thingsboard.server.queue.TbQueueAdmin; | 28 | import org.thingsboard.server.queue.TbQueueAdmin; |
29 | import org.thingsboard.server.queue.TbQueueConsumer; | 29 | import org.thingsboard.server.queue.TbQueueConsumer; |
30 | -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
31 | import org.thingsboard.server.queue.TbQueueProducer; | 30 | import org.thingsboard.server.queue.TbQueueProducer; |
32 | -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
33 | -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
34 | -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
35 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 31 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
36 | import org.thingsboard.server.queue.discovery.PartitionService; | 32 | import org.thingsboard.server.queue.discovery.PartitionService; |
37 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 33 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
@@ -39,6 +35,10 @@ import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; | @@ -39,6 +35,10 @@ import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; | ||
39 | import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; | 35 | import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; |
40 | import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate; | 36 | import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate; |
41 | import org.thingsboard.server.queue.pubsub.TbPubSubSettings; | 37 | import org.thingsboard.server.queue.pubsub.TbPubSubSettings; |
38 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
39 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
40 | +import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
41 | +import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
42 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | 42 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; |
43 | 43 | ||
44 | @Component | 44 | @Component |
@@ -54,8 +54,6 @@ public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng | @@ -54,8 +54,6 @@ public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng | ||
54 | private final PartitionService partitionService; | 54 | private final PartitionService partitionService; |
55 | private final TbServiceInfoProvider serviceInfoProvider; | 55 | private final TbServiceInfoProvider serviceInfoProvider; |
56 | 56 | ||
57 | - private TbQueueProducer<TbProtoQueueMsg<ToCoreMsg>> tbCoreProducer; | ||
58 | - | ||
59 | public PubSubMonolithQueueFactory(TbPubSubSettings pubSubSettings, | 57 | public PubSubMonolithQueueFactory(TbPubSubSettings pubSubSettings, |
60 | TbQueueCoreSettings coreSettings, | 58 | TbQueueCoreSettings coreSettings, |
61 | TbQueueRuleEngineSettings ruleEngineSettings, | 59 | TbQueueRuleEngineSettings ruleEngineSettings, |
common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusMonolithQueueFactory.java
0 → 100644
1 | +/** | ||
2 | + * Copyright © 2016-2020 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.queue.provider; | ||
17 | + | ||
18 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | ||
19 | +import org.springframework.stereotype.Component; | ||
20 | +import org.thingsboard.server.common.msg.queue.ServiceType; | ||
21 | +import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | ||
22 | +import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; | ||
23 | +import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | ||
24 | +import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; | ||
25 | +import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
26 | +import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; | ||
27 | +import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | ||
28 | +import org.thingsboard.server.queue.TbQueueAdmin; | ||
29 | +import org.thingsboard.server.queue.TbQueueConsumer; | ||
30 | +import org.thingsboard.server.queue.TbQueueProducer; | ||
31 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; | ||
32 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; | ||
33 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; | ||
34 | +import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
35 | +import org.thingsboard.server.queue.discovery.PartitionService; | ||
36 | +import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | ||
37 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
38 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
39 | +import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
40 | +import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
41 | +import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | ||
42 | + | ||
43 | +@Component | ||
44 | +@ConditionalOnExpression("'${queue.type:null}'=='service-bus' && '${service.type:null}'=='monolith'") | ||
45 | +public class ServiceBusMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory { | ||
46 | + | ||
47 | + private final PartitionService partitionService; | ||
48 | + private final TbQueueCoreSettings coreSettings; | ||
49 | + private final TbServiceInfoProvider serviceInfoProvider; | ||
50 | + private final TbQueueRuleEngineSettings ruleEngineSettings; | ||
51 | + private final TbQueueTransportApiSettings transportApiSettings; | ||
52 | + private final TbQueueTransportNotificationSettings transportNotificationSettings; | ||
53 | + private final TbServiceBusSettings serviceBusSettings; | ||
54 | + private final TbQueueAdmin admin; | ||
55 | + | ||
56 | + public ServiceBusMonolithQueueFactory(PartitionService partitionService, TbQueueCoreSettings coreSettings, | ||
57 | + TbQueueRuleEngineSettings ruleEngineSettings, | ||
58 | + TbServiceInfoProvider serviceInfoProvider, | ||
59 | + TbQueueTransportApiSettings transportApiSettings, | ||
60 | + TbQueueTransportNotificationSettings transportNotificationSettings, | ||
61 | + TbServiceBusSettings serviceBusSettings, | ||
62 | + TbQueueAdmin admin) { | ||
63 | + this.partitionService = partitionService; | ||
64 | + this.coreSettings = coreSettings; | ||
65 | + this.serviceInfoProvider = serviceInfoProvider; | ||
66 | + this.ruleEngineSettings = ruleEngineSettings; | ||
67 | + this.transportApiSettings = transportApiSettings; | ||
68 | + this.transportNotificationSettings = transportNotificationSettings; | ||
69 | + this.serviceBusSettings = serviceBusSettings; | ||
70 | + this.admin = admin; | ||
71 | + } | ||
72 | + | ||
73 | + @Override | ||
74 | + public TbQueueProducer<TbProtoQueueMsg<ToTransportMsg>> createTransportNotificationsMsgProducer() { | ||
75 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, transportNotificationSettings.getNotificationsTopic()); | ||
76 | + } | ||
77 | + | ||
78 | + @Override | ||
79 | + public TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> createRuleEngineMsgProducer() { | ||
80 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, ruleEngineSettings.getTopic()); | ||
81 | + } | ||
82 | + | ||
83 | + @Override | ||
84 | + public TbQueueProducer<TbProtoQueueMsg<ToRuleEngineNotificationMsg>> createRuleEngineNotificationsMsgProducer() { | ||
85 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, ruleEngineSettings.getTopic()); | ||
86 | + } | ||
87 | + | ||
88 | + @Override | ||
89 | + public TbQueueProducer<TbProtoQueueMsg<ToCoreMsg>> createTbCoreMsgProducer() { | ||
90 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | ||
91 | + } | ||
92 | + | ||
93 | + @Override | ||
94 | + public TbQueueProducer<TbProtoQueueMsg<ToCoreNotificationMsg>> createTbCoreNotificationsMsgProducer() { | ||
95 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | ||
96 | + } | ||
97 | + | ||
98 | + @Override | ||
99 | + public TbQueueConsumer<TbProtoQueueMsg<ToRuleEngineMsg>> createToRuleEngineMsgConsumer(TbRuleEngineQueueConfiguration configuration) { | ||
100 | + return new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, ruleEngineSettings.getTopic(), | ||
101 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
102 | + } | ||
103 | + | ||
104 | + @Override | ||
105 | + public TbQueueConsumer<TbProtoQueueMsg<ToRuleEngineNotificationMsg>> createToRuleEngineNotificationsMsgConsumer() { | ||
106 | + return new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, | ||
107 | + partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), | ||
108 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
109 | + } | ||
110 | + | ||
111 | + @Override | ||
112 | + public TbQueueConsumer<TbProtoQueueMsg<ToCoreMsg>> createToCoreMsgConsumer() { | ||
113 | + return new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic(), | ||
114 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
115 | + } | ||
116 | + | ||
117 | + @Override | ||
118 | + public TbQueueConsumer<TbProtoQueueMsg<ToCoreNotificationMsg>> createToCoreNotificationsMsgConsumer() { | ||
119 | + return new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, | ||
120 | + partitionService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), | ||
121 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
122 | + } | ||
123 | + | ||
124 | + @Override | ||
125 | + public TbQueueConsumer<TbProtoQueueMsg<TransportApiRequestMsg>> createTransportApiRequestConsumer() { | ||
126 | + return new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, transportApiSettings.getRequestsTopic(), | ||
127 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
128 | + } | ||
129 | + | ||
130 | + @Override | ||
131 | + public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { | ||
132 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, transportApiSettings.getResponsesTopic()); | ||
133 | + } | ||
134 | +} |
common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbCoreQueueProvider.java
0 → 100644
1 | +/** | ||
2 | + * Copyright © 2016-2020 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.queue.provider; | ||
17 | + | ||
18 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | ||
19 | +import org.springframework.stereotype.Component; | ||
20 | +import org.thingsboard.server.common.msg.queue.ServiceType; | ||
21 | +import org.thingsboard.server.gen.transport.TransportProtos; | ||
22 | +import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | ||
23 | +import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | ||
24 | +import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
25 | +import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; | ||
26 | +import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | ||
27 | +import org.thingsboard.server.queue.TbQueueAdmin; | ||
28 | +import org.thingsboard.server.queue.TbQueueConsumer; | ||
29 | +import org.thingsboard.server.queue.TbQueueProducer; | ||
30 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; | ||
31 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; | ||
32 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; | ||
33 | +import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
34 | +import org.thingsboard.server.queue.discovery.PartitionService; | ||
35 | +import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | ||
36 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
37 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
38 | +import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
39 | + | ||
40 | +@Component | ||
41 | +@ConditionalOnExpression("'${queue.type:null}'=='service-bus' && '${service.type:null}'=='tb-core'") | ||
42 | +public class ServiceBusTbCoreQueueProvider implements TbCoreQueueFactory { | ||
43 | + | ||
44 | + private final TbServiceBusSettings serviceBusSettings; | ||
45 | + private final TbQueueRuleEngineSettings ruleEngineSettings; | ||
46 | + private final TbQueueCoreSettings coreSettings; | ||
47 | + private final TbQueueTransportApiSettings transportApiSettings; | ||
48 | + private final PartitionService partitionService; | ||
49 | + private final TbServiceInfoProvider serviceInfoProvider; | ||
50 | + private final TbQueueAdmin admin; | ||
51 | + | ||
52 | + public ServiceBusTbCoreQueueProvider(TbServiceBusSettings serviceBusSettings, | ||
53 | + TbQueueCoreSettings coreSettings, | ||
54 | + TbQueueTransportApiSettings transportApiSettings, | ||
55 | + TbQueueRuleEngineSettings ruleEngineSettings, | ||
56 | + PartitionService partitionService, | ||
57 | + TbServiceInfoProvider serviceInfoProvider, | ||
58 | + TbQueueAdmin admin) { | ||
59 | + this.serviceBusSettings = serviceBusSettings; | ||
60 | + this.coreSettings = coreSettings; | ||
61 | + this.transportApiSettings = transportApiSettings; | ||
62 | + this.ruleEngineSettings = ruleEngineSettings; | ||
63 | + this.partitionService = partitionService; | ||
64 | + this.serviceInfoProvider = serviceInfoProvider; | ||
65 | + this.admin = admin; | ||
66 | + } | ||
67 | + | ||
68 | + @Override | ||
69 | + public TbQueueProducer<TbProtoQueueMsg<ToTransportMsg>> createTransportNotificationsMsgProducer() { | ||
70 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | ||
71 | + } | ||
72 | + | ||
73 | + @Override | ||
74 | + public TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> createRuleEngineMsgProducer() { | ||
75 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | ||
76 | + } | ||
77 | + | ||
78 | + @Override | ||
79 | + public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToRuleEngineNotificationMsg>> createRuleEngineNotificationsMsgProducer() { | ||
80 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, ruleEngineSettings.getTopic()); | ||
81 | + } | ||
82 | + | ||
83 | + @Override | ||
84 | + public TbQueueProducer<TbProtoQueueMsg<ToCoreMsg>> createTbCoreMsgProducer() { | ||
85 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | ||
86 | + } | ||
87 | + | ||
88 | + @Override | ||
89 | + public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToCoreNotificationMsg>> createTbCoreNotificationsMsgProducer() { | ||
90 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | ||
91 | + } | ||
92 | + | ||
93 | + @Override | ||
94 | + public TbQueueConsumer<TbProtoQueueMsg<ToCoreMsg>> createToCoreMsgConsumer() { | ||
95 | + return new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic(), | ||
96 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
97 | + } | ||
98 | + | ||
99 | + @Override | ||
100 | + public TbQueueConsumer<TbProtoQueueMsg<TransportProtos.ToCoreNotificationMsg>> createToCoreNotificationsMsgConsumer() { | ||
101 | + return new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, | ||
102 | + partitionService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), | ||
103 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
104 | + } | ||
105 | + | ||
106 | + @Override | ||
107 | + public TbQueueConsumer<TbProtoQueueMsg<TransportApiRequestMsg>> createTransportApiRequestConsumer() { | ||
108 | + return new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, transportApiSettings.getRequestsTopic(), | ||
109 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
110 | + } | ||
111 | + | ||
112 | + @Override | ||
113 | + public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { | ||
114 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | ||
115 | + } | ||
116 | +} |
1 | +/** | ||
2 | + * Copyright © 2016-2020 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.queue.provider; | ||
17 | + | ||
18 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | ||
19 | +import org.springframework.stereotype.Component; | ||
20 | +import org.thingsboard.server.common.msg.queue.ServiceType; | ||
21 | +import org.thingsboard.server.gen.transport.TransportProtos; | ||
22 | +import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | ||
23 | +import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | ||
24 | +import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
25 | +import org.thingsboard.server.queue.TbQueueAdmin; | ||
26 | +import org.thingsboard.server.queue.TbQueueConsumer; | ||
27 | +import org.thingsboard.server.queue.TbQueueProducer; | ||
28 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; | ||
29 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; | ||
30 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; | ||
31 | +import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
32 | +import org.thingsboard.server.queue.discovery.PartitionService; | ||
33 | +import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | ||
34 | +import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
35 | +import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | ||
36 | +import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | ||
37 | + | ||
38 | +@Component | ||
39 | +@ConditionalOnExpression("'${queue.type:null}'=='service-bus' && '${service.type:null}'=='tb-rule-engine'") | ||
40 | +public class ServiceBusTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { | ||
41 | + | ||
42 | + private final PartitionService partitionService; | ||
43 | + private final TbQueueCoreSettings coreSettings; | ||
44 | + private final TbServiceInfoProvider serviceInfoProvider; | ||
45 | + private final TbQueueRuleEngineSettings ruleEngineSettings; | ||
46 | + private final TbServiceBusSettings serviceBusSettings; | ||
47 | + private final TbQueueAdmin admin; | ||
48 | + | ||
49 | + public ServiceBusTbRuleEngineQueueFactory(PartitionService partitionService, TbQueueCoreSettings coreSettings, | ||
50 | + TbQueueRuleEngineSettings ruleEngineSettings, | ||
51 | + TbServiceInfoProvider serviceInfoProvider, | ||
52 | + TbServiceBusSettings serviceBusSettings, | ||
53 | + TbQueueAdmin admin) { | ||
54 | + this.partitionService = partitionService; | ||
55 | + this.coreSettings = coreSettings; | ||
56 | + this.serviceInfoProvider = serviceInfoProvider; | ||
57 | + this.ruleEngineSettings = ruleEngineSettings; | ||
58 | + this.serviceBusSettings = serviceBusSettings; | ||
59 | + this.admin = admin; | ||
60 | + } | ||
61 | + | ||
62 | + @Override | ||
63 | + public TbQueueProducer<TbProtoQueueMsg<ToTransportMsg>> createTransportNotificationsMsgProducer() { | ||
64 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | ||
65 | + } | ||
66 | + | ||
67 | + @Override | ||
68 | + public TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> createRuleEngineMsgProducer() { | ||
69 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | ||
70 | + } | ||
71 | + | ||
72 | + @Override | ||
73 | + public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToRuleEngineNotificationMsg>> createRuleEngineNotificationsMsgProducer() { | ||
74 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, ruleEngineSettings.getTopic()); | ||
75 | + } | ||
76 | + | ||
77 | + @Override | ||
78 | + public TbQueueProducer<TbProtoQueueMsg<ToCoreMsg>> createTbCoreMsgProducer() { | ||
79 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | ||
80 | + } | ||
81 | + | ||
82 | + @Override | ||
83 | + public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToCoreNotificationMsg>> createTbCoreNotificationsMsgProducer() { | ||
84 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | ||
85 | + } | ||
86 | + | ||
87 | + @Override | ||
88 | + public TbQueueConsumer<TbProtoQueueMsg<ToRuleEngineMsg>> createToRuleEngineMsgConsumer(TbRuleEngineQueueConfiguration configuration) { | ||
89 | + return new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, ruleEngineSettings.getTopic(), | ||
90 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
91 | + } | ||
92 | + | ||
93 | + @Override | ||
94 | + public TbQueueConsumer<TbProtoQueueMsg<TransportProtos.ToRuleEngineNotificationMsg>> createToRuleEngineNotificationsMsgConsumer() { | ||
95 | + return new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, | ||
96 | + partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), | ||
97 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
98 | + } | ||
99 | +} |
1 | +/** | ||
2 | + * Copyright © 2016-2020 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.queue.provider; | ||
17 | + | ||
18 | +import lombok.extern.slf4j.Slf4j; | ||
19 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | ||
20 | +import org.springframework.stereotype.Component; | ||
21 | +import org.thingsboard.server.gen.transport.TransportProtos; | ||
22 | +import org.thingsboard.server.queue.TbQueueAdmin; | ||
23 | +import org.thingsboard.server.queue.TbQueueConsumer; | ||
24 | +import org.thingsboard.server.queue.TbQueueProducer; | ||
25 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
26 | +import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; | ||
27 | +import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
28 | +import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | ||
29 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; | ||
30 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; | ||
31 | +import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; | ||
32 | +import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
33 | +import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | ||
34 | + | ||
35 | +@Component | ||
36 | +@ConditionalOnExpression("'${queue.type:null}'=='service-bus' && ('${service.type:null}'=='monolith' || '${service.type:null}'=='tb-transport')") | ||
37 | +@Slf4j | ||
38 | +public class ServiceBusTransportQueueFactory implements TbTransportQueueFactory { | ||
39 | + private final TbQueueTransportApiSettings transportApiSettings; | ||
40 | + private final TbQueueTransportNotificationSettings transportNotificationSettings; | ||
41 | + private final TbServiceBusSettings serviceBusSettings; | ||
42 | + private final TbQueueAdmin admin; | ||
43 | + private final TbServiceInfoProvider serviceInfoProvider; | ||
44 | + | ||
45 | + public ServiceBusTransportQueueFactory(TbQueueTransportApiSettings transportApiSettings, | ||
46 | + TbQueueTransportNotificationSettings transportNotificationSettings, | ||
47 | + TbServiceBusSettings serviceBusSettings, | ||
48 | + TbServiceInfoProvider serviceInfoProvider, | ||
49 | + TbQueueAdmin admin) { | ||
50 | + this.transportApiSettings = transportApiSettings; | ||
51 | + this.transportNotificationSettings = transportNotificationSettings; | ||
52 | + this.serviceBusSettings = serviceBusSettings; | ||
53 | + this.admin = admin; | ||
54 | + this.serviceInfoProvider = serviceInfoProvider; | ||
55 | + } | ||
56 | + | ||
57 | + @Override | ||
58 | + public TbQueueRequestTemplate<TbProtoQueueMsg<TransportProtos.TransportApiRequestMsg>, TbProtoQueueMsg<TransportProtos.TransportApiResponseMsg>> createTransportApiRequestTemplate() { | ||
59 | + TbQueueProducer<TbProtoQueueMsg<TransportProtos.TransportApiRequestMsg>> producerTemplate = | ||
60 | + new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, transportApiSettings.getRequestsTopic()); | ||
61 | + | ||
62 | + TbQueueConsumer<TbProtoQueueMsg<TransportProtos.TransportApiResponseMsg>> consumerTemplate = | ||
63 | + new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, | ||
64 | + transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId(), | ||
65 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
66 | + | ||
67 | + DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder | ||
68 | + <TbProtoQueueMsg<TransportProtos.TransportApiRequestMsg>, TbProtoQueueMsg<TransportProtos.TransportApiResponseMsg>> templateBuilder = DefaultTbQueueRequestTemplate.builder(); | ||
69 | + templateBuilder.queueAdmin(admin); | ||
70 | + templateBuilder.requestTemplate(producerTemplate); | ||
71 | + templateBuilder.responseTemplate(consumerTemplate); | ||
72 | + templateBuilder.maxPendingRequests(transportApiSettings.getMaxPendingRequests()); | ||
73 | + templateBuilder.maxRequestTimeout(transportApiSettings.getMaxRequestsTimeout()); | ||
74 | + templateBuilder.pollInterval(transportApiSettings.getResponsePollInterval()); | ||
75 | + return templateBuilder.build(); | ||
76 | + } | ||
77 | + | ||
78 | + @Override | ||
79 | + public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToRuleEngineMsg>> createRuleEngineMsgProducer() { | ||
80 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, transportApiSettings.getRequestsTopic()); | ||
81 | + } | ||
82 | + | ||
83 | + @Override | ||
84 | + public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToCoreMsg>> createTbCoreMsgProducer() { | ||
85 | + return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, transportApiSettings.getRequestsTopic()); | ||
86 | + } | ||
87 | + | ||
88 | + @Override | ||
89 | + public TbQueueConsumer<TbProtoQueueMsg<TransportProtos.ToTransportMsg>> createTransportNotificationsConsumer() { | ||
90 | + return new TbServiceBusConsumerTemplate<>(admin, serviceBusSettings, | ||
91 | + transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId(), | ||
92 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); | ||
93 | + } | ||
94 | +} |
@@ -20,7 +20,6 @@ import com.google.api.core.ApiFutures; | @@ -20,7 +20,6 @@ import com.google.api.core.ApiFutures; | ||
20 | import com.google.cloud.pubsub.v1.stub.GrpcSubscriberStub; | 20 | import com.google.cloud.pubsub.v1.stub.GrpcSubscriberStub; |
21 | import com.google.cloud.pubsub.v1.stub.SubscriberStub; | 21 | import com.google.cloud.pubsub.v1.stub.SubscriberStub; |
22 | import com.google.cloud.pubsub.v1.stub.SubscriberStubSettings; | 22 | import com.google.cloud.pubsub.v1.stub.SubscriberStubSettings; |
23 | -import com.google.common.reflect.TypeToken; | ||
24 | import com.google.gson.Gson; | 23 | import com.google.gson.Gson; |
25 | import com.google.protobuf.InvalidProtocolBufferException; | 24 | import com.google.protobuf.InvalidProtocolBufferException; |
26 | import com.google.pubsub.v1.AcknowledgeRequest; | 25 | import com.google.pubsub.v1.AcknowledgeRequest; |
@@ -36,15 +35,12 @@ import org.thingsboard.server.queue.TbQueueAdmin; | @@ -36,15 +35,12 @@ import org.thingsboard.server.queue.TbQueueAdmin; | ||
36 | import org.thingsboard.server.queue.TbQueueConsumer; | 35 | import org.thingsboard.server.queue.TbQueueConsumer; |
37 | import org.thingsboard.server.queue.TbQueueMsg; | 36 | import org.thingsboard.server.queue.TbQueueMsg; |
38 | import org.thingsboard.server.queue.TbQueueMsgDecoder; | 37 | import org.thingsboard.server.queue.TbQueueMsgDecoder; |
39 | -import org.thingsboard.server.queue.TbQueueMsgHeaders; | ||
40 | import org.thingsboard.server.queue.common.DefaultTbQueueMsg; | 38 | import org.thingsboard.server.queue.common.DefaultTbQueueMsg; |
41 | -import org.thingsboard.server.queue.common.DefaultTbQueueMsgHeaders; | ||
42 | 39 | ||
43 | import java.io.IOException; | 40 | import java.io.IOException; |
44 | import java.util.ArrayList; | 41 | import java.util.ArrayList; |
45 | import java.util.Collections; | 42 | import java.util.Collections; |
46 | import java.util.List; | 43 | import java.util.List; |
47 | -import java.util.Map; | ||
48 | import java.util.Objects; | 44 | import java.util.Objects; |
49 | import java.util.Set; | 45 | import java.util.Set; |
50 | import java.util.concurrent.CopyOnWriteArrayList; | 46 | import java.util.concurrent.CopyOnWriteArrayList; |
@@ -139,7 +135,7 @@ public class TbPubSubConsumerTemplate<T extends TbQueueMsg> implements TbQueueCo | @@ -139,7 +135,7 @@ public class TbPubSubConsumerTemplate<T extends TbQueueMsg> implements TbQueueCo | ||
139 | subscriptionNames = partitions.stream().map(TopicPartitionInfo::getFullTopicName).collect(Collectors.toSet()); | 135 | subscriptionNames = partitions.stream().map(TopicPartitionInfo::getFullTopicName).collect(Collectors.toSet()); |
140 | subscriptionNames.forEach(admin::createTopicIfNotExists); | 136 | subscriptionNames.forEach(admin::createTopicIfNotExists); |
141 | consumerExecutor = Executors.newFixedThreadPool(subscriptionNames.size()); | 137 | consumerExecutor = Executors.newFixedThreadPool(subscriptionNames.size()); |
142 | - messagesPerTopic = pubSubSettings.getMaxMessages()/subscriptionNames.size(); | 138 | + messagesPerTopic = pubSubSettings.getMaxMessages() / subscriptionNames.size(); |
143 | subscribed = true; | 139 | subscribed = true; |
144 | } | 140 | } |
145 | List<ReceivedMessage> messages; | 141 | List<ReceivedMessage> messages; |
@@ -217,11 +213,6 @@ public class TbPubSubConsumerTemplate<T extends TbQueueMsg> implements TbQueueCo | @@ -217,11 +213,6 @@ public class TbPubSubConsumerTemplate<T extends TbQueueMsg> implements TbQueueCo | ||
217 | 213 | ||
218 | public T decode(PubsubMessage message) throws InvalidProtocolBufferException { | 214 | public T decode(PubsubMessage message) throws InvalidProtocolBufferException { |
219 | DefaultTbQueueMsg msg = gson.fromJson(message.getData().toStringUtf8(), DefaultTbQueueMsg.class); | 215 | DefaultTbQueueMsg msg = gson.fromJson(message.getData().toStringUtf8(), DefaultTbQueueMsg.class); |
220 | - TbQueueMsgHeaders headers = new DefaultTbQueueMsgHeaders(); | ||
221 | - Map<String, byte[]> headerMap = gson.fromJson(message.getAttributesMap().get("headers"), new TypeToken<Map<String, byte[]>>() { | ||
222 | - }.getType()); | ||
223 | - headerMap.forEach(headers::put); | ||
224 | - msg.setHeaders(headers); | ||
225 | return decoder.decode(msg); | 216 | return decoder.decode(msg); |
226 | } | 217 | } |
227 | 218 |
@@ -71,7 +71,6 @@ public class TbPubSubProducerTemplate<T extends TbQueueMsg> implements TbQueuePr | @@ -71,7 +71,6 @@ public class TbPubSubProducerTemplate<T extends TbQueueMsg> implements TbQueuePr | ||
71 | public void send(TopicPartitionInfo tpi, T msg, TbQueueCallback callback) { | 71 | public void send(TopicPartitionInfo tpi, T msg, TbQueueCallback callback) { |
72 | PubsubMessage.Builder pubsubMessageBuilder = PubsubMessage.newBuilder(); | 72 | PubsubMessage.Builder pubsubMessageBuilder = PubsubMessage.newBuilder(); |
73 | pubsubMessageBuilder.setData(getMsg(msg)); | 73 | pubsubMessageBuilder.setData(getMsg(msg)); |
74 | - pubsubMessageBuilder.putAttributes("headers", gson.toJson(msg.getHeaders().getData())); | ||
75 | 74 | ||
76 | Publisher publisher = getOrCreatePublisher(tpi.getFullTopicName()); | 75 | Publisher publisher = getOrCreatePublisher(tpi.getFullTopicName()); |
77 | ApiFuture<String> future = publisher.publish(pubsubMessageBuilder.build()); | 76 | ApiFuture<String> future = publisher.publish(pubsubMessageBuilder.build()); |
@@ -110,7 +109,7 @@ public class TbPubSubProducerTemplate<T extends TbQueueMsg> implements TbQueuePr | @@ -110,7 +109,7 @@ public class TbPubSubProducerTemplate<T extends TbQueueMsg> implements TbQueuePr | ||
110 | } | 109 | } |
111 | 110 | ||
112 | private ByteString getMsg(T msg) { | 111 | private ByteString getMsg(T msg) { |
113 | - String json = gson.toJson(new DefaultTbQueueMsg(msg.getKey(), msg.getData())); | 112 | + String json = gson.toJson(new DefaultTbQueueMsg(msg)); |
114 | return ByteString.copyFrom(json.getBytes()); | 113 | return ByteString.copyFrom(json.getBytes()); |
115 | } | 114 | } |
116 | 115 |
@@ -23,7 +23,6 @@ import com.amazonaws.services.sqs.AmazonSQSClientBuilder; | @@ -23,7 +23,6 @@ import com.amazonaws.services.sqs.AmazonSQSClientBuilder; | ||
23 | import com.amazonaws.services.sqs.model.DeleteMessageBatchRequestEntry; | 23 | import com.amazonaws.services.sqs.model.DeleteMessageBatchRequestEntry; |
24 | import com.amazonaws.services.sqs.model.Message; | 24 | import com.amazonaws.services.sqs.model.Message; |
25 | import com.amazonaws.services.sqs.model.ReceiveMessageRequest; | 25 | import com.amazonaws.services.sqs.model.ReceiveMessageRequest; |
26 | -import com.google.common.reflect.TypeToken; | ||
27 | import com.google.common.util.concurrent.Futures; | 26 | import com.google.common.util.concurrent.Futures; |
28 | import com.google.common.util.concurrent.ListenableFuture; | 27 | import com.google.common.util.concurrent.ListenableFuture; |
29 | import com.google.common.util.concurrent.ListeningExecutorService; | 28 | import com.google.common.util.concurrent.ListeningExecutorService; |
@@ -38,15 +37,12 @@ import org.thingsboard.server.queue.TbQueueAdmin; | @@ -38,15 +37,12 @@ import org.thingsboard.server.queue.TbQueueAdmin; | ||
38 | import org.thingsboard.server.queue.TbQueueConsumer; | 37 | import org.thingsboard.server.queue.TbQueueConsumer; |
39 | import org.thingsboard.server.queue.TbQueueMsg; | 38 | import org.thingsboard.server.queue.TbQueueMsg; |
40 | import org.thingsboard.server.queue.TbQueueMsgDecoder; | 39 | import org.thingsboard.server.queue.TbQueueMsgDecoder; |
41 | -import org.thingsboard.server.queue.TbQueueMsgHeaders; | ||
42 | import org.thingsboard.server.queue.common.DefaultTbQueueMsg; | 40 | import org.thingsboard.server.queue.common.DefaultTbQueueMsg; |
43 | -import org.thingsboard.server.queue.common.DefaultTbQueueMsgHeaders; | ||
44 | 41 | ||
45 | import java.io.IOException; | 42 | import java.io.IOException; |
46 | import java.util.ArrayList; | 43 | import java.util.ArrayList; |
47 | import java.util.Collections; | 44 | import java.util.Collections; |
48 | import java.util.List; | 45 | import java.util.List; |
49 | -import java.util.Map; | ||
50 | import java.util.Objects; | 46 | import java.util.Objects; |
51 | import java.util.Set; | 47 | import java.util.Set; |
52 | import java.util.concurrent.CopyOnWriteArrayList; | 48 | import java.util.concurrent.CopyOnWriteArrayList; |
@@ -161,7 +157,7 @@ public class TbAwsSqsConsumerTemplate<T extends TbQueueMsg> implements TbQueueCo | @@ -161,7 +157,7 @@ public class TbAwsSqsConsumerTemplate<T extends TbQueueMsg> implements TbQueueCo | ||
161 | if (stopped) { | 157 | if (stopped) { |
162 | log.info("[{}] Aws SQS consumer is stopped.", topic); | 158 | log.info("[{}] Aws SQS consumer is stopped.", topic); |
163 | } else { | 159 | } else { |
164 | - log.error("Failed to pool messages.", e); | 160 | + log.error("Failed to pool messages.", e); |
165 | } | 161 | } |
166 | } | 162 | } |
167 | } | 163 | } |
@@ -214,11 +210,6 @@ public class TbAwsSqsConsumerTemplate<T extends TbQueueMsg> implements TbQueueCo | @@ -214,11 +210,6 @@ public class TbAwsSqsConsumerTemplate<T extends TbQueueMsg> implements TbQueueCo | ||
214 | 210 | ||
215 | public T decode(Message message) throws InvalidProtocolBufferException { | 211 | public T decode(Message message) throws InvalidProtocolBufferException { |
216 | DefaultTbQueueMsg msg = gson.fromJson(message.getBody(), DefaultTbQueueMsg.class); | 212 | DefaultTbQueueMsg msg = gson.fromJson(message.getBody(), DefaultTbQueueMsg.class); |
217 | - TbQueueMsgHeaders headers = new DefaultTbQueueMsgHeaders(); | ||
218 | - Map<String, byte[]> headerMap = gson.fromJson(message.getMessageAttributes().get("headers").getStringValue(), new TypeToken<Map<String, byte[]>>() { | ||
219 | - }.getType()); | ||
220 | - headerMap.forEach(headers::put); | ||
221 | - msg.setHeaders(headers); | ||
222 | return decoder.decode(msg); | 213 | return decoder.decode(msg); |
223 | } | 214 | } |
224 | 215 |
@@ -20,7 +20,6 @@ import com.amazonaws.auth.AWSStaticCredentialsProvider; | @@ -20,7 +20,6 @@ import com.amazonaws.auth.AWSStaticCredentialsProvider; | ||
20 | import com.amazonaws.auth.BasicAWSCredentials; | 20 | import com.amazonaws.auth.BasicAWSCredentials; |
21 | import com.amazonaws.services.sqs.AmazonSQS; | 21 | import com.amazonaws.services.sqs.AmazonSQS; |
22 | import com.amazonaws.services.sqs.AmazonSQSClientBuilder; | 22 | import com.amazonaws.services.sqs.AmazonSQSClientBuilder; |
23 | -import com.amazonaws.services.sqs.model.MessageAttributeValue; | ||
24 | import com.amazonaws.services.sqs.model.SendMessageRequest; | 23 | import com.amazonaws.services.sqs.model.SendMessageRequest; |
25 | import com.amazonaws.services.sqs.model.SendMessageResult; | 24 | import com.amazonaws.services.sqs.model.SendMessageResult; |
26 | import com.google.common.util.concurrent.FutureCallback; | 25 | import com.google.common.util.concurrent.FutureCallback; |
@@ -37,7 +36,6 @@ import org.thingsboard.server.queue.TbQueueMsg; | @@ -37,7 +36,6 @@ import org.thingsboard.server.queue.TbQueueMsg; | ||
37 | import org.thingsboard.server.queue.TbQueueProducer; | 36 | import org.thingsboard.server.queue.TbQueueProducer; |
38 | import org.thingsboard.server.queue.common.DefaultTbQueueMsg; | 37 | import org.thingsboard.server.queue.common.DefaultTbQueueMsg; |
39 | 38 | ||
40 | -import java.util.HashMap; | ||
41 | import java.util.Map; | 39 | import java.util.Map; |
42 | import java.util.concurrent.ConcurrentHashMap; | 40 | import java.util.concurrent.ConcurrentHashMap; |
43 | import java.util.concurrent.Executors; | 41 | import java.util.concurrent.Executors; |
@@ -82,13 +80,6 @@ public class TbAwsSqsProducerTemplate<T extends TbQueueMsg> implements TbQueuePr | @@ -82,13 +80,6 @@ public class TbAwsSqsProducerTemplate<T extends TbQueueMsg> implements TbQueuePr | ||
82 | sendMsgRequest.withQueueUrl(getQueueUrl(tpi.getFullTopicName())); | 80 | sendMsgRequest.withQueueUrl(getQueueUrl(tpi.getFullTopicName())); |
83 | sendMsgRequest.withMessageBody(gson.toJson(new DefaultTbQueueMsg(msg.getKey(), msg.getData()))); | 81 | sendMsgRequest.withMessageBody(gson.toJson(new DefaultTbQueueMsg(msg.getKey(), msg.getData()))); |
84 | 82 | ||
85 | - Map<String, MessageAttributeValue> attributes = new HashMap<>(); | ||
86 | - | ||
87 | - attributes.put("headers", new MessageAttributeValue() | ||
88 | - .withStringValue(gson.toJson(msg.getHeaders().getData())) | ||
89 | - .withDataType("String")); | ||
90 | - | ||
91 | - sendMsgRequest.withMessageAttributes(attributes); | ||
92 | sendMsgRequest.withMessageGroupId(msg.getKey().toString()); | 83 | sendMsgRequest.withMessageGroupId(msg.getKey().toString()); |
93 | ListenableFuture<SendMessageResult> future = producerExecutor.submit(() -> sqsClient.sendMessage(sendMsgRequest)); | 84 | ListenableFuture<SendMessageResult> future = producerExecutor.submit(() -> sqsClient.sendMessage(sendMsgRequest)); |
94 | 85 |
@@ -94,6 +94,7 @@ | @@ -94,6 +94,7 @@ | ||
94 | <snakeyaml.version>1.23</snakeyaml.version> | 94 | <snakeyaml.version>1.23</snakeyaml.version> |
95 | <amazonaws.sqs.version>1.11.747</amazonaws.sqs.version> | 95 | <amazonaws.sqs.version>1.11.747</amazonaws.sqs.version> |
96 | <pubsub.client.version>1.84.0</pubsub.client.version> | 96 | <pubsub.client.version>1.84.0</pubsub.client.version> |
97 | + <azure-servicebus.version>3.2.0</azure-servicebus.version> | ||
97 | <passay.version>1.5.0</passay.version> | 98 | <passay.version>1.5.0</passay.version> |
98 | <ua-parser.version>1.4.3</ua-parser.version> | 99 | <ua-parser.version>1.4.3</ua-parser.version> |
99 | </properties> | 100 | </properties> |
@@ -899,6 +900,11 @@ | @@ -899,6 +900,11 @@ | ||
899 | <version>${pubsub.client.version}</version> | 900 | <version>${pubsub.client.version}</version> |
900 | </dependency> | 901 | </dependency> |
901 | <dependency> | 902 | <dependency> |
903 | + <groupId>com.microsoft.azure</groupId> | ||
904 | + <artifactId>azure-servicebus</artifactId> | ||
905 | + <version>${azure-servicebus.version}</version> | ||
906 | + </dependency> | ||
907 | + <dependency> | ||
902 | <groupId>org.passay</groupId> | 908 | <groupId>org.passay</groupId> |
903 | <artifactId>passay</artifactId> | 909 | <artifactId>passay</artifactId> |
904 | <version>${passay.version}</version> | 910 | <version>${passay.version}</version> |
@@ -63,7 +63,7 @@ transport: | @@ -63,7 +63,7 @@ transport: | ||
63 | max_string_value_length: "${JSON_MAX_STRING_VALUE_LENGTH:0}" | 63 | max_string_value_length: "${JSON_MAX_STRING_VALUE_LENGTH:0}" |
64 | 64 | ||
65 | queue: | 65 | queue: |
66 | - type: "${TB_QUEUE_TYPE:kafka}" # kafka or aws-sqs or pubsub | 66 | + type: "${TB_QUEUE_TYPE:kafka}" # kafka or aws-sqs or pubsub or service-bus |
67 | kafka: | 67 | kafka: |
68 | bootstrap.servers: "${TB_KAFKA_SERVERS:localhost:9092}" | 68 | bootstrap.servers: "${TB_KAFKA_SERVERS:localhost:9092}" |
69 | acks: "${TB_KAFKA_ACKS:all}" | 69 | acks: "${TB_KAFKA_ACKS:all}" |
@@ -83,6 +83,11 @@ queue: | @@ -83,6 +83,11 @@ queue: | ||
83 | ack_deadline: "${TB_QUEUE_PUBSUB_ACK_DEADLINE:30}" #In seconds. If messages wont commit in this time, messages will poll again | 83 | ack_deadline: "${TB_QUEUE_PUBSUB_ACK_DEADLINE:30}" #In seconds. If messages wont commit in this time, messages will poll again |
84 | max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}" #in bytes | 84 | max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}" #in bytes |
85 | max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}" | 85 | max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}" |
86 | + service_bus: | ||
87 | + namespace_name: "${TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME:YOUR_NAMESPACE_NAME}" | ||
88 | + sas_key_name: "${TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME:YOUR_SAS_KEY_NAME}" | ||
89 | + sas_key: "${TB_QUEUE_SERVICE_BUS_SAS_KEY:YOUR_SAS_KEY}" | ||
90 | + max_messages: "${TB_QUEUE_SERVICE_BUS_MAX_MESSAGES:1000}" | ||
86 | partitions: | 91 | partitions: |
87 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" | 92 | hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" |
88 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" | 93 | virtual_nodes_size: "${TB_QUEUE_PARTITIONS_VIRTUAL_NODES_SIZE:16}" |