Commit 1dd3334825212603da640af693f1f95e274943c5
Committed by
Andrew Shvayka
1 parent
7b3d4752
moved jsinvoke.proto to queue, fixed js-executor, added createRemoteJsRequestTem…
…plate to RuleEngine and Core factories
Showing
21 changed files
with
353 additions
and
76 deletions
@@ -21,14 +21,15 @@ import com.google.common.util.concurrent.ListenableFuture; | @@ -21,14 +21,15 @@ import com.google.common.util.concurrent.ListenableFuture; | ||
21 | import com.google.common.util.concurrent.MoreExecutors; | 21 | import com.google.common.util.concurrent.MoreExecutors; |
22 | import lombok.Getter; | 22 | import lombok.Getter; |
23 | import lombok.extern.slf4j.Slf4j; | 23 | import lombok.extern.slf4j.Slf4j; |
24 | +import org.springframework.beans.factory.annotation.Autowired; | ||
24 | import org.springframework.beans.factory.annotation.Value; | 25 | import org.springframework.beans.factory.annotation.Value; |
25 | -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | 26 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
26 | import org.springframework.scheduling.annotation.Scheduled; | 27 | import org.springframework.scheduling.annotation.Scheduled; |
27 | import org.springframework.stereotype.Service; | 28 | import org.springframework.stereotype.Service; |
28 | -import org.thingsboard.server.queue.TbQueueProducer; | ||
29 | -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; | ||
30 | -import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
31 | import org.thingsboard.server.gen.js.JsInvokeProtos; | 29 | import org.thingsboard.server.gen.js.JsInvokeProtos; |
30 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
31 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
32 | +import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
32 | 33 | ||
33 | import javax.annotation.Nullable; | 34 | import javax.annotation.Nullable; |
34 | import javax.annotation.PostConstruct; | 35 | import javax.annotation.PostConstruct; |
@@ -41,28 +42,13 @@ import java.util.concurrent.TimeoutException; | @@ -41,28 +42,13 @@ import java.util.concurrent.TimeoutException; | ||
41 | import java.util.concurrent.atomic.AtomicInteger; | 42 | import java.util.concurrent.atomic.AtomicInteger; |
42 | 43 | ||
43 | @Slf4j | 44 | @Slf4j |
44 | -@ConditionalOnProperty(prefix = "js", value = "evaluator", havingValue = "remote", matchIfMissing = true) | 45 | +@ConditionalOnExpression("'${js.evaluator:null}'=='remote' && ('${service.type:null}'=='monolith' || '${service.type:null}'=='tb-core' || '${service.type:null}'=='tb-rule-engine')") |
45 | @Service | 46 | @Service |
46 | public class RemoteJsInvokeService extends AbstractJsInvokeService { | 47 | public class RemoteJsInvokeService extends AbstractJsInvokeService { |
47 | 48 | ||
48 | - @Value("${js.remote.request_topic}") | ||
49 | - private String requestTopic; | ||
50 | - | ||
51 | - @Value("${js.remote.response_topic_prefix}") | ||
52 | - private String responseTopicPrefix; | ||
53 | - | ||
54 | - @Value("${js.remote.max_pending_requests}") | ||
55 | - private long maxPendingRequests; | ||
56 | - | ||
57 | @Value("${js.remote.max_requests_timeout}") | 49 | @Value("${js.remote.max_requests_timeout}") |
58 | private long maxRequestsTimeout; | 50 | private long maxRequestsTimeout; |
59 | 51 | ||
60 | - @Value("${js.remote.response_poll_interval}") | ||
61 | - private int responsePollDuration; | ||
62 | - | ||
63 | - @Value("${js.remote.response_auto_commit_interval}") | ||
64 | - private int autoCommitInterval; | ||
65 | - | ||
66 | @Getter | 52 | @Getter |
67 | @Value("${js.remote.max_errors}") | 53 | @Value("${js.remote.max_errors}") |
68 | private int maxErrors; | 54 | private int maxErrors; |
@@ -94,43 +80,20 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService { | @@ -94,43 +80,20 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService { | ||
94 | } | 80 | } |
95 | } | 81 | } |
96 | 82 | ||
97 | - private DefaultTbQueueRequestTemplate<TbProtoQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> defaultTemplate; | 83 | + @Autowired |
84 | + private TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> requestTemplate; | ||
85 | + | ||
98 | private Map<UUID, String> scriptIdToBodysMap = new ConcurrentHashMap<>(); | 86 | private Map<UUID, String> scriptIdToBodysMap = new ConcurrentHashMap<>(); |
99 | 87 | ||
100 | @PostConstruct | 88 | @PostConstruct |
101 | public void init() { | 89 | public void init() { |
102 | -// TBKafkaProducerTemplate.TBKafkaProducerTemplateBuilder<TbProtoQueueMsg<JsInvokeProtos.RemoteJsRequest>> requestBuilder = TBKafkaProducerTemplate.builder(); | ||
103 | -// requestBuilder.settings(kafkaSettings); | ||
104 | -// requestBuilder.clientId("producer-js-invoke-" + nodeIdProvider.getNodeId()); | ||
105 | -// requestBuilder.defaultTopic(requestTopic); | ||
106 | -// requestBuilder.encoder(new RemoteJsRequestEncoder()); | ||
107 | - TbQueueProducer<TbProtoQueueMsg<JsInvokeProtos.RemoteJsRequest>> producer; | ||
108 | - | ||
109 | -// TBKafkaConsumerTemplate.TBKafkaConsumerTemplateBuilder<JsInvokeProtos.RemoteJsResponse> responseBuilder = TBKafkaConsumerTemplate.builder(); | ||
110 | -// responseBuilder.settings(kafkaSettings); | ||
111 | -// responseBuilder.topic(responseTopicPrefix + "." + nodeIdProvider.getNodeId()); | ||
112 | -// responseBuilder.clientId("js-" + nodeIdProvider.getNodeId()); | ||
113 | -// responseBuilder.groupId("rule-engine-node-" + nodeIdProvider.getNodeId()); | ||
114 | -// responseBuilder.autoCommit(true); | ||
115 | -// responseBuilder.autoCommitIntervalMs(autoCommitInterval); | ||
116 | -// responseBuilder.decoder(new RemoteJsResponseDecoder()); | ||
117 | -// responseBuilder.requestIdExtractor((response) -> new UUID(response.getRequestIdMSB(), response.getRequestIdLSB())); | ||
118 | -// | ||
119 | -// TbKafkaRequestTemplate.TbKafkaRequestTemplateBuilder | ||
120 | -// <JsInvokeProtos.RemoteJsRequest, JsInvokeProtos.RemoteJsResponse> builder = TbKafkaRequestTemplate.builder(); | ||
121 | -// builder.requestTemplate(requestBuilder.build()); | ||
122 | -// builder.responseTemplate(responseBuilder.build()); | ||
123 | -// builder.maxPendingRequests(maxPendingRequests); | ||
124 | -// builder.maxRequestTimeout(maxRequestsTimeout); | ||
125 | -// builder.pollInterval(responsePollDuration); | ||
126 | -// defaultTemplate = builder.build(); | ||
127 | -// defaultTemplate.init(); | 90 | + requestTemplate.init(); |
128 | } | 91 | } |
129 | 92 | ||
130 | @PreDestroy | 93 | @PreDestroy |
131 | public void destroy() { | 94 | public void destroy() { |
132 | - if (defaultTemplate != null) { | ||
133 | - defaultTemplate.stop(); | 95 | + if (requestTemplate != null) { |
96 | + requestTemplate.stop(); | ||
134 | } | 97 | } |
135 | } | 98 | } |
136 | 99 | ||
@@ -147,7 +110,7 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService { | @@ -147,7 +110,7 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService { | ||
147 | .build(); | 110 | .build(); |
148 | 111 | ||
149 | log.trace("Post compile request for scriptId [{}]", scriptId); | 112 | log.trace("Post compile request for scriptId [{}]", scriptId); |
150 | - ListenableFuture<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> future = defaultTemplate.send(new TbProtoQueueMsg<>(UUID.randomUUID(), jsRequestWrapper)); | 113 | + ListenableFuture<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> future = requestTemplate.send(new TbProtoJsQueueMsg<>(UUID.randomUUID(), jsRequestWrapper)); |
151 | 114 | ||
152 | kafkaPushedMsgs.incrementAndGet(); | 115 | kafkaPushedMsgs.incrementAndGet(); |
153 | Futures.addCallback(future, new FutureCallback<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>>() { | 116 | Futures.addCallback(future, new FutureCallback<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>>() { |
@@ -199,7 +162,7 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService { | @@ -199,7 +162,7 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService { | ||
199 | .setInvokeRequest(jsRequestBuilder.build()) | 162 | .setInvokeRequest(jsRequestBuilder.build()) |
200 | .build(); | 163 | .build(); |
201 | 164 | ||
202 | - ListenableFuture<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> future = defaultTemplate.send(new TbProtoQueueMsg<>(UUID.randomUUID(), jsRequestWrapper)); | 165 | + ListenableFuture<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> future = requestTemplate.send(new TbProtoJsQueueMsg<>(UUID.randomUUID(), jsRequestWrapper)); |
203 | kafkaPushedMsgs.incrementAndGet(); | 166 | kafkaPushedMsgs.incrementAndGet(); |
204 | Futures.addCallback(future, new FutureCallback<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>>() { | 167 | Futures.addCallback(future, new FutureCallback<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>>() { |
205 | @Override | 168 | @Override |
@@ -239,7 +202,7 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService { | @@ -239,7 +202,7 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService { | ||
239 | .setReleaseRequest(jsRequest) | 202 | .setReleaseRequest(jsRequest) |
240 | .build(); | 203 | .build(); |
241 | 204 | ||
242 | - ListenableFuture<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> future = defaultTemplate.send(new TbProtoQueueMsg<>(UUID.randomUUID(), jsRequestWrapper)); | 205 | + ListenableFuture<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> future = requestTemplate.send(new TbProtoJsQueueMsg<>(UUID.randomUUID(), jsRequestWrapper)); |
243 | JsInvokeProtos.RemoteJsResponse response = future.get().getValue(); | 206 | JsInvokeProtos.RemoteJsResponse response = future.get().getValue(); |
244 | 207 | ||
245 | JsInvokeProtos.JsReleaseResponse compilationResult = response.getReleaseResponse(); | 208 | JsInvokeProtos.JsReleaseResponse compilationResult = response.getReleaseResponse(); |
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.common; | ||
17 | + | ||
18 | +import com.google.protobuf.InvalidProtocolBufferException; | ||
19 | +import com.google.protobuf.util.JsonFormat; | ||
20 | +import org.thingsboard.server.queue.TbQueueMsgHeaders; | ||
21 | + | ||
22 | +import java.nio.charset.StandardCharsets; | ||
23 | +import java.util.UUID; | ||
24 | + | ||
25 | +public class TbProtoJsQueueMsg<T extends com.google.protobuf.GeneratedMessageV3> extends TbProtoQueueMsg<T> { | ||
26 | + | ||
27 | + public TbProtoJsQueueMsg(UUID key, T value) { | ||
28 | + super(key, value); | ||
29 | + } | ||
30 | + | ||
31 | + public TbProtoJsQueueMsg(UUID key, T value, TbQueueMsgHeaders headers) { | ||
32 | + super(key, value, headers); | ||
33 | + } | ||
34 | + | ||
35 | + @Override | ||
36 | + public byte[] getData() { | ||
37 | + try { | ||
38 | + return JsonFormat.printer().print(value).getBytes(StandardCharsets.UTF_8); | ||
39 | + } catch (InvalidProtocolBufferException e) { | ||
40 | + throw new RuntimeException(e); | ||
41 | + } | ||
42 | + } | ||
43 | +} |
@@ -25,7 +25,7 @@ import java.util.UUID; | @@ -25,7 +25,7 @@ import java.util.UUID; | ||
25 | public class TbProtoQueueMsg<T extends com.google.protobuf.GeneratedMessageV3> implements TbQueueMsg { | 25 | public class TbProtoQueueMsg<T extends com.google.protobuf.GeneratedMessageV3> implements TbQueueMsg { |
26 | 26 | ||
27 | private final UUID key; | 27 | private final UUID key; |
28 | - private final T value; | 28 | + protected final T value; |
29 | private final TbQueueMsgHeaders headers; | 29 | private final TbQueueMsgHeaders headers; |
30 | 30 | ||
31 | public TbProtoQueueMsg(UUID key, T value) { | 31 | public TbProtoQueueMsg(UUID key, T value) { |
@@ -18,10 +18,13 @@ package org.thingsboard.server.queue.provider; | @@ -18,10 +18,13 @@ 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.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos; | 22 | import org.thingsboard.server.gen.transport.TransportProtos; |
22 | import org.thingsboard.server.queue.TbQueueAdmin; | 23 | import org.thingsboard.server.queue.TbQueueAdmin; |
23 | import org.thingsboard.server.queue.TbQueueConsumer; | 24 | import org.thingsboard.server.queue.TbQueueConsumer; |
24 | import org.thingsboard.server.queue.TbQueueProducer; | 25 | import org.thingsboard.server.queue.TbQueueProducer; |
26 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
27 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
25 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 28 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
26 | import org.thingsboard.server.queue.discovery.PartitionService; | 29 | import org.thingsboard.server.queue.discovery.PartitionService; |
27 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 30 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
@@ -125,4 +128,9 @@ public class AwsSqsMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng | @@ -125,4 +128,9 @@ public class AwsSqsMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng | ||
125 | public TbQueueProducer<TbProtoQueueMsg<TransportProtos.TransportApiResponseMsg>> createTransportApiResponseProducer() { | 128 | public TbQueueProducer<TbProtoQueueMsg<TransportProtos.TransportApiResponseMsg>> createTransportApiResponseProducer() { |
126 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, transportApiSettings.getResponsesTopic()); | 129 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, transportApiSettings.getResponsesTopic()); |
127 | } | 130 | } |
131 | + | ||
132 | + @Override | ||
133 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
134 | + return null; | ||
135 | + } | ||
128 | } | 136 | } |
@@ -18,6 +18,7 @@ package org.thingsboard.server.queue.provider; | @@ -18,6 +18,7 @@ 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.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 22 | 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.ToCoreNotificationMsg; |
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
@@ -28,6 +29,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponse | @@ -28,6 +29,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponse | ||
28 | import org.thingsboard.server.queue.TbQueueAdmin; | 29 | import org.thingsboard.server.queue.TbQueueAdmin; |
29 | import org.thingsboard.server.queue.TbQueueConsumer; | 30 | import org.thingsboard.server.queue.TbQueueConsumer; |
30 | import org.thingsboard.server.queue.TbQueueProducer; | 31 | import org.thingsboard.server.queue.TbQueueProducer; |
32 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
33 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
31 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 34 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
32 | import org.thingsboard.server.queue.discovery.PartitionService; | 35 | import org.thingsboard.server.queue.discovery.PartitionService; |
33 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 36 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
@@ -114,4 +117,9 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { | @@ -114,4 +117,9 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { | ||
114 | public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { | 117 | public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { |
115 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, coreSettings.getTopic()); | 118 | return new TbAwsSqsProducerTemplate<>(admin, sqsSettings, coreSettings.getTopic()); |
116 | } | 119 | } |
120 | + | ||
121 | + @Override | ||
122 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
123 | + return null; | ||
124 | + } | ||
117 | } | 125 | } |
common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java
@@ -18,6 +18,7 @@ package org.thingsboard.server.queue.provider; | @@ -18,6 +18,7 @@ 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.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos; | 22 | import org.thingsboard.server.gen.transport.TransportProtos; |
22 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 23 | 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.ToRuleEngineMsg; |
@@ -25,6 +26,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | @@ -25,6 +26,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
25 | import org.thingsboard.server.queue.TbQueueAdmin; | 26 | import org.thingsboard.server.queue.TbQueueAdmin; |
26 | import org.thingsboard.server.queue.TbQueueConsumer; | 27 | import org.thingsboard.server.queue.TbQueueConsumer; |
27 | import org.thingsboard.server.queue.TbQueueProducer; | 28 | import org.thingsboard.server.queue.TbQueueProducer; |
29 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
30 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
28 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 31 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
29 | import org.thingsboard.server.queue.discovery.PartitionService; | 32 | import org.thingsboard.server.queue.discovery.PartitionService; |
30 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 33 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
@@ -96,4 +99,9 @@ public class AwsSqsTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory | @@ -96,4 +99,9 @@ public class AwsSqsTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory | ||
96 | partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), | 99 | partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), |
97 | msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); | 100 | msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); |
98 | } | 101 | } |
102 | + | ||
103 | + @Override | ||
104 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
105 | + return null; | ||
106 | + } | ||
99 | } | 107 | } |
@@ -18,6 +18,7 @@ package org.thingsboard.server.queue.provider; | @@ -18,6 +18,7 @@ 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.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 22 | 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.ToCoreNotificationMsg; |
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
@@ -27,6 +28,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestM | @@ -27,6 +28,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestM | ||
27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 28 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
28 | import org.thingsboard.server.queue.TbQueueConsumer; | 29 | import org.thingsboard.server.queue.TbQueueConsumer; |
29 | import org.thingsboard.server.queue.TbQueueProducer; | 30 | import org.thingsboard.server.queue.TbQueueProducer; |
31 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
32 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
30 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 33 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
31 | import org.thingsboard.server.queue.memory.InMemoryTbQueueConsumer; | 34 | import org.thingsboard.server.queue.memory.InMemoryTbQueueConsumer; |
32 | import org.thingsboard.server.queue.memory.InMemoryTbQueueProducer; | 35 | import org.thingsboard.server.queue.memory.InMemoryTbQueueProducer; |
@@ -110,4 +113,9 @@ public class InMemoryMonolithQueueFactory implements TbCoreQueueFactory, TbRuleE | @@ -110,4 +113,9 @@ public class InMemoryMonolithQueueFactory implements TbCoreQueueFactory, TbRuleE | ||
110 | public TbQueueConsumer<TbProtoQueueMsg<ToRuleEngineNotificationMsg>> createToRuleEngineNotificationsMsgConsumer() { | 113 | public TbQueueConsumer<TbProtoQueueMsg<ToRuleEngineNotificationMsg>> createToRuleEngineNotificationsMsgConsumer() { |
111 | return new InMemoryTbQueueConsumer<>(ruleEngineSettings.getTopic() + ".notifications"); | 114 | return new InMemoryTbQueueConsumer<>(ruleEngineSettings.getTopic() + ".notifications"); |
112 | } | 115 | } |
116 | + | ||
117 | + @Override | ||
118 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
119 | + return null; | ||
120 | + } | ||
113 | } | 121 | } |
@@ -15,9 +15,12 @@ | @@ -15,9 +15,12 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.queue.provider; | 16 | package org.thingsboard.server.queue.provider; |
17 | 17 | ||
18 | +import com.google.protobuf.util.JsonFormat; | ||
18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | 19 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
20 | +import org.springframework.context.annotation.Bean; | ||
19 | import org.springframework.stereotype.Component; | 21 | import org.springframework.stereotype.Component; |
20 | import org.thingsboard.server.common.msg.queue.ServiceType; | 22 | import org.thingsboard.server.common.msg.queue.ServiceType; |
23 | +import org.thingsboard.server.gen.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
22 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 26 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
@@ -27,18 +30,25 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestM | @@ -27,18 +30,25 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestM | ||
27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 30 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
28 | import org.thingsboard.server.queue.TbQueueConsumer; | 31 | import org.thingsboard.server.queue.TbQueueConsumer; |
29 | import org.thingsboard.server.queue.TbQueueProducer; | 32 | import org.thingsboard.server.queue.TbQueueProducer; |
33 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
34 | +import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; | ||
35 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
30 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 36 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
31 | import org.thingsboard.server.queue.discovery.PartitionService; | 37 | import org.thingsboard.server.queue.discovery.PartitionService; |
32 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 38 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
39 | +import org.thingsboard.server.queue.kafka.TBKafkaAdmin; | ||
33 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; | 40 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; |
34 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; | 41 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; |
35 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; | 42 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; |
36 | import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | 43 | import org.thingsboard.server.queue.settings.TbQueueCoreSettings; |
44 | +import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; | ||
37 | import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | 45 | import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; |
38 | import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | 46 | import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; |
39 | import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; | 47 | import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; |
40 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | 48 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; |
41 | 49 | ||
50 | +import java.nio.charset.StandardCharsets; | ||
51 | + | ||
42 | @Component | 52 | @Component |
43 | @ConditionalOnExpression("'${queue.type:null}'=='kafka' && '${service.type:null}'=='monolith'") | 53 | @ConditionalOnExpression("'${queue.type:null}'=='kafka' && '${service.type:null}'=='monolith'") |
44 | public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory { | 54 | public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory { |
@@ -50,13 +60,15 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi | @@ -50,13 +60,15 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi | ||
50 | private final TbQueueRuleEngineSettings ruleEngineSettings; | 60 | private final TbQueueRuleEngineSettings ruleEngineSettings; |
51 | private final TbQueueTransportApiSettings transportApiSettings; | 61 | private final TbQueueTransportApiSettings transportApiSettings; |
52 | private final TbQueueTransportNotificationSettings transportNotificationSettings; | 62 | private final TbQueueTransportNotificationSettings transportNotificationSettings; |
63 | + private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; | ||
53 | 64 | ||
54 | public KafkaMonolithQueueFactory(PartitionService partitionService, TbKafkaSettings kafkaSettings, | 65 | public KafkaMonolithQueueFactory(PartitionService partitionService, TbKafkaSettings kafkaSettings, |
55 | TbServiceInfoProvider serviceInfoProvider, | 66 | TbServiceInfoProvider serviceInfoProvider, |
56 | TbQueueCoreSettings coreSettings, | 67 | TbQueueCoreSettings coreSettings, |
57 | TbQueueRuleEngineSettings ruleEngineSettings, | 68 | TbQueueRuleEngineSettings ruleEngineSettings, |
58 | TbQueueTransportApiSettings transportApiSettings, | 69 | TbQueueTransportApiSettings transportApiSettings, |
59 | - TbQueueTransportNotificationSettings transportNotificationSettings) { | 70 | + TbQueueTransportNotificationSettings transportNotificationSettings, |
71 | + TbQueueRemoteJsInvokeSettings jsInvokeSettings) { | ||
60 | this.partitionService = partitionService; | 72 | this.partitionService = partitionService; |
61 | this.kafkaSettings = kafkaSettings; | 73 | this.kafkaSettings = kafkaSettings; |
62 | this.serviceInfoProvider = serviceInfoProvider; | 74 | this.serviceInfoProvider = serviceInfoProvider; |
@@ -64,6 +76,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi | @@ -64,6 +76,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi | ||
64 | this.ruleEngineSettings = ruleEngineSettings; | 76 | this.ruleEngineSettings = ruleEngineSettings; |
65 | this.transportApiSettings = transportApiSettings; | 77 | this.transportApiSettings = transportApiSettings; |
66 | this.transportNotificationSettings = transportNotificationSettings; | 78 | this.transportNotificationSettings = transportNotificationSettings; |
79 | + this.jsInvokeSettings = jsInvokeSettings; | ||
67 | } | 80 | } |
68 | 81 | ||
69 | @Override | 82 | @Override |
@@ -175,4 +188,37 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi | @@ -175,4 +188,37 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi | ||
175 | requestBuilder.defaultTopic(transportApiSettings.getResponsesTopic()); | 188 | requestBuilder.defaultTopic(transportApiSettings.getResponsesTopic()); |
176 | return requestBuilder.build(); | 189 | return requestBuilder.build(); |
177 | } | 190 | } |
191 | + | ||
192 | + @Override | ||
193 | + @Bean | ||
194 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
195 | + TBKafkaProducerTemplate.TBKafkaProducerTemplateBuilder<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>> requestBuilder = TBKafkaProducerTemplate.builder(); | ||
196 | + requestBuilder.settings(kafkaSettings); | ||
197 | + requestBuilder.clientId("producer-js-invoke-" + serviceInfoProvider.getServiceId()); | ||
198 | + requestBuilder.defaultTopic(jsInvokeSettings.getRequestTopic()); | ||
199 | + | ||
200 | + TBKafkaConsumerTemplate.TBKafkaConsumerTemplateBuilder<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> responseBuilder = TBKafkaConsumerTemplate.builder(); | ||
201 | + responseBuilder.settings(kafkaSettings); | ||
202 | + responseBuilder.topic(jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId()); | ||
203 | + responseBuilder.clientId("js-" + serviceInfoProvider.getServiceId()); | ||
204 | + responseBuilder.groupId("rule-engine-node-" + serviceInfoProvider.getServiceId()); | ||
205 | +// responseBuilder.autoCommit(true); | ||
206 | +// responseBuilder.autoCommitIntervalMs(autoCommitInterval); | ||
207 | + responseBuilder.decoder(msg -> { | ||
208 | + JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); | ||
209 | + JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); | ||
210 | + return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); | ||
211 | + } | ||
212 | + ); | ||
213 | + | ||
214 | + DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder | ||
215 | + <TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> builder = DefaultTbQueueRequestTemplate.builder(); | ||
216 | + builder.queueAdmin(new TBKafkaAdmin(kafkaSettings)); | ||
217 | + builder.requestTemplate(requestBuilder.build()); | ||
218 | + builder.responseTemplate(responseBuilder.build()); | ||
219 | + builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); | ||
220 | + builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); | ||
221 | + builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); | ||
222 | + return builder.build(); | ||
223 | + } | ||
178 | } | 224 | } |
@@ -15,9 +15,12 @@ | @@ -15,9 +15,12 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.queue.provider; | 16 | package org.thingsboard.server.queue.provider; |
17 | 17 | ||
18 | +import com.google.protobuf.util.JsonFormat; | ||
18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | 19 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
20 | +import org.springframework.context.annotation.Bean; | ||
19 | import org.springframework.stereotype.Component; | 21 | import org.springframework.stereotype.Component; |
20 | import org.thingsboard.server.common.msg.queue.ServiceType; | 22 | import org.thingsboard.server.common.msg.queue.ServiceType; |
23 | +import org.thingsboard.server.gen.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
22 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 26 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
@@ -27,16 +30,23 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestM | @@ -27,16 +30,23 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestM | ||
27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 30 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
28 | import org.thingsboard.server.queue.TbQueueConsumer; | 31 | import org.thingsboard.server.queue.TbQueueConsumer; |
29 | import org.thingsboard.server.queue.TbQueueProducer; | 32 | import org.thingsboard.server.queue.TbQueueProducer; |
33 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
34 | +import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; | ||
35 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
30 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 36 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
31 | import org.thingsboard.server.queue.discovery.PartitionService; | 37 | import org.thingsboard.server.queue.discovery.PartitionService; |
32 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 38 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
39 | +import org.thingsboard.server.queue.kafka.TBKafkaAdmin; | ||
33 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; | 40 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; |
34 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; | 41 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; |
35 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; | 42 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; |
36 | import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | 43 | import org.thingsboard.server.queue.settings.TbQueueCoreSettings; |
44 | +import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; | ||
37 | import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | 45 | import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; |
38 | import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | 46 | import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; |
39 | 47 | ||
48 | +import java.nio.charset.StandardCharsets; | ||
49 | + | ||
40 | @Component | 50 | @Component |
41 | @ConditionalOnExpression("'${queue.type:null}'=='kafka' && '${service.type:null}'=='tb-core'") | 51 | @ConditionalOnExpression("'${queue.type:null}'=='kafka' && '${service.type:null}'=='tb-core'") |
42 | public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { | 52 | public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { |
@@ -47,18 +57,21 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { | @@ -47,18 +57,21 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { | ||
47 | private final TbQueueCoreSettings coreSettings; | 57 | private final TbQueueCoreSettings coreSettings; |
48 | private final TbQueueRuleEngineSettings ruleEngineSettings; | 58 | private final TbQueueRuleEngineSettings ruleEngineSettings; |
49 | private final TbQueueTransportApiSettings transportApiSettings; | 59 | private final TbQueueTransportApiSettings transportApiSettings; |
60 | + private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; | ||
50 | 61 | ||
51 | public KafkaTbCoreQueueFactory(PartitionService partitionService, TbKafkaSettings kafkaSettings, | 62 | public KafkaTbCoreQueueFactory(PartitionService partitionService, TbKafkaSettings kafkaSettings, |
52 | TbServiceInfoProvider serviceInfoProvider, | 63 | TbServiceInfoProvider serviceInfoProvider, |
53 | TbQueueCoreSettings coreSettings, | 64 | TbQueueCoreSettings coreSettings, |
54 | TbQueueRuleEngineSettings ruleEngineSettings, | 65 | TbQueueRuleEngineSettings ruleEngineSettings, |
55 | - TbQueueTransportApiSettings transportApiSettings) { | 66 | + TbQueueTransportApiSettings transportApiSettings, |
67 | + TbQueueRemoteJsInvokeSettings jsInvokeSettings) { | ||
56 | this.partitionService = partitionService; | 68 | this.partitionService = partitionService; |
57 | this.kafkaSettings = kafkaSettings; | 69 | this.kafkaSettings = kafkaSettings; |
58 | this.serviceInfoProvider = serviceInfoProvider; | 70 | this.serviceInfoProvider = serviceInfoProvider; |
59 | this.coreSettings = coreSettings; | 71 | this.coreSettings = coreSettings; |
60 | this.ruleEngineSettings = ruleEngineSettings; | 72 | this.ruleEngineSettings = ruleEngineSettings; |
61 | this.transportApiSettings = transportApiSettings; | 73 | this.transportApiSettings = transportApiSettings; |
74 | + this.jsInvokeSettings = jsInvokeSettings; | ||
62 | } | 75 | } |
63 | 76 | ||
64 | @Override | 77 | @Override |
@@ -148,4 +161,37 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { | @@ -148,4 +161,37 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { | ||
148 | return requestBuilder.build(); | 161 | return requestBuilder.build(); |
149 | } | 162 | } |
150 | 163 | ||
164 | + @Override | ||
165 | + @Bean | ||
166 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
167 | + TBKafkaProducerTemplate.TBKafkaProducerTemplateBuilder<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>> requestBuilder = TBKafkaProducerTemplate.builder(); | ||
168 | + requestBuilder.settings(kafkaSettings); | ||
169 | + requestBuilder.clientId("producer-js-invoke-" + serviceInfoProvider.getServiceId()); | ||
170 | + requestBuilder.defaultTopic(jsInvokeSettings.getRequestTopic()); | ||
171 | + | ||
172 | + TBKafkaConsumerTemplate.TBKafkaConsumerTemplateBuilder<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> responseBuilder = TBKafkaConsumerTemplate.builder(); | ||
173 | + responseBuilder.settings(kafkaSettings); | ||
174 | + responseBuilder.topic(jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId()); | ||
175 | + responseBuilder.clientId("js-" + serviceInfoProvider.getServiceId()); | ||
176 | + responseBuilder.groupId("rule-engine-node-" + serviceInfoProvider.getServiceId()); | ||
177 | +// responseBuilder.autoCommit(true); | ||
178 | +// responseBuilder.autoCommitIntervalMs(autoCommitInterval); | ||
179 | + responseBuilder.decoder(msg -> { | ||
180 | + JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); | ||
181 | + JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); | ||
182 | + return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); | ||
183 | + } | ||
184 | + ); | ||
185 | + | ||
186 | + DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder | ||
187 | + <TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> builder = DefaultTbQueueRequestTemplate.builder(); | ||
188 | + builder.queueAdmin(new TBKafkaAdmin(kafkaSettings)); | ||
189 | + builder.requestTemplate(requestBuilder.build()); | ||
190 | + builder.responseTemplate(responseBuilder.build()); | ||
191 | + builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); | ||
192 | + builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); | ||
193 | + builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); | ||
194 | + return builder.build(); | ||
195 | + } | ||
196 | + | ||
151 | } | 197 | } |
@@ -15,9 +15,12 @@ | @@ -15,9 +15,12 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.queue.provider; | 16 | package org.thingsboard.server.queue.provider; |
17 | 17 | ||
18 | +import com.google.protobuf.util.JsonFormat; | ||
18 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | 19 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; |
20 | +import org.springframework.context.annotation.Bean; | ||
19 | import org.springframework.stereotype.Component; | 21 | import org.springframework.stereotype.Component; |
20 | import org.thingsboard.server.common.msg.queue.ServiceType; | 22 | import org.thingsboard.server.common.msg.queue.ServiceType; |
23 | +import org.thingsboard.server.gen.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
22 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 26 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
@@ -25,16 +28,23 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotifica | @@ -25,16 +28,23 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotifica | ||
25 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | 28 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
26 | import org.thingsboard.server.queue.TbQueueConsumer; | 29 | import org.thingsboard.server.queue.TbQueueConsumer; |
27 | import org.thingsboard.server.queue.TbQueueProducer; | 30 | import org.thingsboard.server.queue.TbQueueProducer; |
31 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
32 | +import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; | ||
33 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
28 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 34 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
29 | import org.thingsboard.server.queue.discovery.PartitionService; | 35 | import org.thingsboard.server.queue.discovery.PartitionService; |
30 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 36 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
37 | +import org.thingsboard.server.queue.kafka.TBKafkaAdmin; | ||
31 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; | 38 | import org.thingsboard.server.queue.kafka.TBKafkaConsumerTemplate; |
32 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; | 39 | import org.thingsboard.server.queue.kafka.TBKafkaProducerTemplate; |
33 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; | 40 | import org.thingsboard.server.queue.kafka.TbKafkaSettings; |
34 | import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | 41 | import org.thingsboard.server.queue.settings.TbQueueCoreSettings; |
42 | +import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; | ||
35 | import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | 43 | import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; |
36 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | 44 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; |
37 | 45 | ||
46 | +import java.nio.charset.StandardCharsets; | ||
47 | + | ||
38 | @Component | 48 | @Component |
39 | @ConditionalOnExpression("'${queue.type:null}'=='kafka' && '${service.type:null}'=='tb-rule-engine'") | 49 | @ConditionalOnExpression("'${queue.type:null}'=='kafka' && '${service.type:null}'=='tb-rule-engine'") |
40 | public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { | 50 | public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { |
@@ -44,16 +54,19 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { | @@ -44,16 +54,19 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { | ||
44 | private final TbServiceInfoProvider serviceInfoProvider; | 54 | private final TbServiceInfoProvider serviceInfoProvider; |
45 | private final TbQueueCoreSettings coreSettings; | 55 | private final TbQueueCoreSettings coreSettings; |
46 | private final TbQueueRuleEngineSettings ruleEngineSettings; | 56 | private final TbQueueRuleEngineSettings ruleEngineSettings; |
57 | + private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; | ||
47 | 58 | ||
48 | public KafkaTbRuleEngineQueueFactory(PartitionService partitionService, TbKafkaSettings kafkaSettings, | 59 | public KafkaTbRuleEngineQueueFactory(PartitionService partitionService, TbKafkaSettings kafkaSettings, |
49 | TbServiceInfoProvider serviceInfoProvider, | 60 | TbServiceInfoProvider serviceInfoProvider, |
50 | TbQueueCoreSettings coreSettings, | 61 | TbQueueCoreSettings coreSettings, |
51 | - TbQueueRuleEngineSettings ruleEngineSettings) { | 62 | + TbQueueRuleEngineSettings ruleEngineSettings, |
63 | + TbQueueRemoteJsInvokeSettings jsInvokeSettings) { | ||
52 | this.partitionService = partitionService; | 64 | this.partitionService = partitionService; |
53 | this.kafkaSettings = kafkaSettings; | 65 | this.kafkaSettings = kafkaSettings; |
54 | this.serviceInfoProvider = serviceInfoProvider; | 66 | this.serviceInfoProvider = serviceInfoProvider; |
55 | this.coreSettings = coreSettings; | 67 | this.coreSettings = coreSettings; |
56 | this.ruleEngineSettings = ruleEngineSettings; | 68 | this.ruleEngineSettings = ruleEngineSettings; |
69 | + this.jsInvokeSettings = jsInvokeSettings; | ||
57 | } | 70 | } |
58 | 71 | ||
59 | @Override | 72 | @Override |
@@ -124,4 +137,37 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { | @@ -124,4 +137,37 @@ public class KafkaTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { | ||
124 | consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); | 137 | consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); |
125 | return consumerBuilder.build(); | 138 | return consumerBuilder.build(); |
126 | } | 139 | } |
140 | + | ||
141 | + @Override | ||
142 | + @Bean | ||
143 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
144 | + TBKafkaProducerTemplate.TBKafkaProducerTemplateBuilder<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>> requestBuilder = TBKafkaProducerTemplate.builder(); | ||
145 | + requestBuilder.settings(kafkaSettings); | ||
146 | + requestBuilder.clientId("producer-js-invoke-" + serviceInfoProvider.getServiceId()); | ||
147 | + requestBuilder.defaultTopic(jsInvokeSettings.getRequestTopic()); | ||
148 | + | ||
149 | + TBKafkaConsumerTemplate.TBKafkaConsumerTemplateBuilder<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> responseBuilder = TBKafkaConsumerTemplate.builder(); | ||
150 | + responseBuilder.settings(kafkaSettings); | ||
151 | + responseBuilder.topic(jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId()); | ||
152 | + responseBuilder.clientId("js-" + serviceInfoProvider.getServiceId()); | ||
153 | + responseBuilder.groupId("rule-engine-node-" + serviceInfoProvider.getServiceId()); | ||
154 | +// responseBuilder.autoCommit(true); | ||
155 | +// responseBuilder.autoCommitIntervalMs(autoCommitInterval); | ||
156 | + responseBuilder.decoder(msg -> { | ||
157 | + JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); | ||
158 | + JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); | ||
159 | + return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); | ||
160 | + } | ||
161 | + ); | ||
162 | + | ||
163 | + DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder | ||
164 | + <TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> builder = DefaultTbQueueRequestTemplate.builder(); | ||
165 | + builder.queueAdmin(new TBKafkaAdmin(kafkaSettings)); | ||
166 | + builder.requestTemplate(requestBuilder.build()); | ||
167 | + builder.responseTemplate(responseBuilder.build()); | ||
168 | + builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); | ||
169 | + builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); | ||
170 | + builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); | ||
171 | + return builder.build(); | ||
172 | + } | ||
127 | } | 173 | } |
@@ -18,6 +18,7 @@ package org.thingsboard.server.queue.provider; | @@ -18,6 +18,7 @@ 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.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 22 | 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.ToCoreNotificationMsg; |
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
@@ -28,6 +29,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponse | @@ -28,6 +29,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponse | ||
28 | import org.thingsboard.server.queue.TbQueueAdmin; | 29 | import org.thingsboard.server.queue.TbQueueAdmin; |
29 | import org.thingsboard.server.queue.TbQueueConsumer; | 30 | import org.thingsboard.server.queue.TbQueueConsumer; |
30 | import org.thingsboard.server.queue.TbQueueProducer; | 31 | import org.thingsboard.server.queue.TbQueueProducer; |
32 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
33 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
31 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 34 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
32 | import org.thingsboard.server.queue.discovery.PartitionService; | 35 | import org.thingsboard.server.queue.discovery.PartitionService; |
33 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 36 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
@@ -133,4 +136,9 @@ public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng | @@ -133,4 +136,9 @@ public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng | ||
133 | public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { | 136 | public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { |
134 | return new TbPubSubProducerTemplate<>(admin, pubSubSettings, transportApiSettings.getResponsesTopic()); | 137 | return new TbPubSubProducerTemplate<>(admin, pubSubSettings, transportApiSettings.getResponsesTopic()); |
135 | } | 138 | } |
139 | + | ||
140 | + @Override | ||
141 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
142 | + return null; | ||
143 | + } | ||
136 | } | 144 | } |
@@ -18,6 +18,7 @@ package org.thingsboard.server.queue.provider; | @@ -18,6 +18,7 @@ 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.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 22 | 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.ToCoreNotificationMsg; |
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
@@ -27,6 +28,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestM | @@ -27,6 +28,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestM | ||
27 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 28 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
28 | import org.thingsboard.server.queue.TbQueueAdmin; | 29 | import org.thingsboard.server.queue.TbQueueAdmin; |
29 | import org.thingsboard.server.queue.TbQueueConsumer; | 30 | import org.thingsboard.server.queue.TbQueueConsumer; |
31 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
32 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
30 | import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | 33 | import org.thingsboard.server.queue.settings.TbQueueCoreSettings; |
31 | import org.thingsboard.server.queue.TbQueueProducer; | 34 | import org.thingsboard.server.queue.TbQueueProducer; |
32 | import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | 35 | import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; |
@@ -110,4 +113,9 @@ public class PubSubTbCoreQueueFactory implements TbCoreQueueFactory { | @@ -110,4 +113,9 @@ public class PubSubTbCoreQueueFactory implements TbCoreQueueFactory { | ||
110 | public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { | 113 | public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { |
111 | return new TbPubSubProducerTemplate<>(admin, pubSubSettings, coreSettings.getTopic()); | 114 | return new TbPubSubProducerTemplate<>(admin, pubSubSettings, coreSettings.getTopic()); |
112 | } | 115 | } |
116 | + | ||
117 | + @Override | ||
118 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
119 | + return null; | ||
120 | + } | ||
113 | } | 121 | } |
common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbRuleEngineQueueFactory.java
@@ -18,6 +18,7 @@ package org.thingsboard.server.queue.provider; | @@ -18,6 +18,7 @@ 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.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 22 | 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.ToCoreNotificationMsg; |
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
@@ -25,15 +26,17 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotifica | @@ -25,15 +26,17 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotifica | ||
25 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | 26 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
26 | import org.thingsboard.server.queue.TbQueueAdmin; | 27 | import org.thingsboard.server.queue.TbQueueAdmin; |
27 | import org.thingsboard.server.queue.TbQueueConsumer; | 28 | import org.thingsboard.server.queue.TbQueueConsumer; |
28 | -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; | ||
29 | import org.thingsboard.server.queue.TbQueueProducer; | 29 | import org.thingsboard.server.queue.TbQueueProducer; |
30 | -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; | 30 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; |
31 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
31 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 32 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
32 | import org.thingsboard.server.queue.discovery.PartitionService; | 33 | import org.thingsboard.server.queue.discovery.PartitionService; |
33 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 34 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
34 | import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; | 35 | import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; |
35 | import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate; | 36 | import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate; |
36 | 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; | ||
37 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | 40 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; |
38 | 41 | ||
39 | @Component | 42 | @Component |
@@ -99,4 +102,9 @@ public class PubSubTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory | @@ -99,4 +102,9 @@ public class PubSubTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory | ||
99 | partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), | 102 | partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), |
100 | msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); | 103 | msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); |
101 | } | 104 | } |
105 | + | ||
106 | + @Override | ||
107 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
108 | + return null; | ||
109 | + } | ||
102 | } | 110 | } |
common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusMonolithQueueFactory.java
@@ -18,6 +18,7 @@ package org.thingsboard.server.queue.provider; | @@ -18,6 +18,7 @@ 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.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 22 | 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.ToCoreNotificationMsg; |
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
@@ -28,9 +29,11 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponse | @@ -28,9 +29,11 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponse | ||
28 | import org.thingsboard.server.queue.TbQueueAdmin; | 29 | import org.thingsboard.server.queue.TbQueueAdmin; |
29 | import org.thingsboard.server.queue.TbQueueConsumer; | 30 | import org.thingsboard.server.queue.TbQueueConsumer; |
30 | import org.thingsboard.server.queue.TbQueueProducer; | 31 | import org.thingsboard.server.queue.TbQueueProducer; |
32 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
31 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; | 33 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; |
32 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; | 34 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; |
33 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; | 35 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; |
36 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
34 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 37 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
35 | import org.thingsboard.server.queue.discovery.PartitionService; | 38 | import org.thingsboard.server.queue.discovery.PartitionService; |
36 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 39 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
@@ -131,4 +134,9 @@ public class ServiceBusMonolithQueueFactory implements TbCoreQueueFactory, TbRul | @@ -131,4 +134,9 @@ public class ServiceBusMonolithQueueFactory implements TbCoreQueueFactory, TbRul | ||
131 | public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { | 134 | public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { |
132 | return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, transportApiSettings.getResponsesTopic()); | 135 | return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, transportApiSettings.getResponsesTopic()); |
133 | } | 136 | } |
137 | + | ||
138 | + @Override | ||
139 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
140 | + return null; | ||
141 | + } | ||
134 | } | 142 | } |
common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbCoreQueueFactory.java
renamed from
common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbCoreQueueProvider.java
@@ -18,6 +18,7 @@ package org.thingsboard.server.queue.provider; | @@ -18,6 +18,7 @@ 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.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos; | 22 | import org.thingsboard.server.gen.transport.TransportProtos; |
22 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 23 | 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.ToRuleEngineMsg; |
@@ -27,9 +28,11 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponse | @@ -27,9 +28,11 @@ import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponse | ||
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.TbQueueProducer; | 30 | import org.thingsboard.server.queue.TbQueueProducer; |
31 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
30 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; | 32 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; |
31 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; | 33 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; |
32 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; | 34 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; |
35 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
33 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 36 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
34 | import org.thingsboard.server.queue.discovery.PartitionService; | 37 | import org.thingsboard.server.queue.discovery.PartitionService; |
35 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 38 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
@@ -39,7 +42,7 @@ import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | @@ -39,7 +42,7 @@ import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; | ||
39 | 42 | ||
40 | @Component | 43 | @Component |
41 | @ConditionalOnExpression("'${queue.type:null}'=='service-bus' && '${service.type:null}'=='tb-core'") | 44 | @ConditionalOnExpression("'${queue.type:null}'=='service-bus' && '${service.type:null}'=='tb-core'") |
42 | -public class ServiceBusTbCoreQueueProvider implements TbCoreQueueFactory { | 45 | +public class ServiceBusTbCoreQueueFactory implements TbCoreQueueFactory { |
43 | 46 | ||
44 | private final TbServiceBusSettings serviceBusSettings; | 47 | private final TbServiceBusSettings serviceBusSettings; |
45 | private final TbQueueRuleEngineSettings ruleEngineSettings; | 48 | private final TbQueueRuleEngineSettings ruleEngineSettings; |
@@ -49,13 +52,13 @@ public class ServiceBusTbCoreQueueProvider implements TbCoreQueueFactory { | @@ -49,13 +52,13 @@ public class ServiceBusTbCoreQueueProvider implements TbCoreQueueFactory { | ||
49 | private final TbServiceInfoProvider serviceInfoProvider; | 52 | private final TbServiceInfoProvider serviceInfoProvider; |
50 | private final TbQueueAdmin admin; | 53 | private final TbQueueAdmin admin; |
51 | 54 | ||
52 | - public ServiceBusTbCoreQueueProvider(TbServiceBusSettings serviceBusSettings, | ||
53 | - TbQueueCoreSettings coreSettings, | ||
54 | - TbQueueTransportApiSettings transportApiSettings, | ||
55 | - TbQueueRuleEngineSettings ruleEngineSettings, | ||
56 | - PartitionService partitionService, | ||
57 | - TbServiceInfoProvider serviceInfoProvider, | ||
58 | - TbQueueAdmin admin) { | 55 | + public ServiceBusTbCoreQueueFactory(TbServiceBusSettings serviceBusSettings, |
56 | + TbQueueCoreSettings coreSettings, | ||
57 | + TbQueueTransportApiSettings transportApiSettings, | ||
58 | + TbQueueRuleEngineSettings ruleEngineSettings, | ||
59 | + PartitionService partitionService, | ||
60 | + TbServiceInfoProvider serviceInfoProvider, | ||
61 | + TbQueueAdmin admin) { | ||
59 | this.serviceBusSettings = serviceBusSettings; | 62 | this.serviceBusSettings = serviceBusSettings; |
60 | this.coreSettings = coreSettings; | 63 | this.coreSettings = coreSettings; |
61 | this.transportApiSettings = transportApiSettings; | 64 | this.transportApiSettings = transportApiSettings; |
@@ -113,4 +116,9 @@ public class ServiceBusTbCoreQueueProvider implements TbCoreQueueFactory { | @@ -113,4 +116,9 @@ public class ServiceBusTbCoreQueueProvider implements TbCoreQueueFactory { | ||
113 | public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { | 116 | public TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer() { |
114 | return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); | 117 | return new TbServiceBusProducerTemplate<>(admin, serviceBusSettings, coreSettings.getTopic()); |
115 | } | 118 | } |
119 | + | ||
120 | + @Override | ||
121 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
122 | + return null; | ||
123 | + } | ||
116 | } | 124 | } |
@@ -18,6 +18,7 @@ package org.thingsboard.server.queue.provider; | @@ -18,6 +18,7 @@ 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.js.JsInvokeProtos; | ||
21 | import org.thingsboard.server.gen.transport.TransportProtos; | 22 | import org.thingsboard.server.gen.transport.TransportProtos; |
22 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 23 | 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.ToRuleEngineMsg; |
@@ -25,9 +26,11 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | @@ -25,9 +26,11 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
25 | import org.thingsboard.server.queue.TbQueueAdmin; | 26 | import org.thingsboard.server.queue.TbQueueAdmin; |
26 | import org.thingsboard.server.queue.TbQueueConsumer; | 27 | import org.thingsboard.server.queue.TbQueueConsumer; |
27 | import org.thingsboard.server.queue.TbQueueProducer; | 28 | import org.thingsboard.server.queue.TbQueueProducer; |
29 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
28 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; | 30 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; |
29 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; | 31 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; |
30 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; | 32 | import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; |
33 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
31 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 34 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
32 | import org.thingsboard.server.queue.discovery.PartitionService; | 35 | import org.thingsboard.server.queue.discovery.PartitionService; |
33 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; | 36 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
@@ -96,4 +99,9 @@ public class ServiceBusTbRuleEngineQueueFactory implements TbRuleEngineQueueFact | @@ -96,4 +99,9 @@ public class ServiceBusTbRuleEngineQueueFactory implements TbRuleEngineQueueFact | ||
96 | partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), | 99 | partitionService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), |
97 | msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); | 100 | msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); |
98 | } | 101 | } |
102 | + | ||
103 | + @Override | ||
104 | + public TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate() { | ||
105 | + return null; | ||
106 | + } | ||
99 | } | 107 | } |
@@ -15,15 +15,19 @@ | @@ -15,15 +15,19 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.queue.provider; | 16 | package org.thingsboard.server.queue.provider; |
17 | 17 | ||
18 | -import org.thingsboard.server.gen.transport.TransportProtos.*; | ||
19 | -import org.thingsboard.server.queue.TbQueueConsumer; | ||
20 | -import org.thingsboard.server.queue.TbQueueProducer; | ||
21 | -import org.thingsboard.server.queue.common.TbProtoQueueMsg; | 18 | +import org.thingsboard.server.gen.js.JsInvokeProtos; |
22 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 19 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
20 | +import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; | ||
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 21 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
22 | +import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; | ||
24 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | 23 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
25 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; | 24 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; |
26 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; | 25 | import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; |
26 | +import org.thingsboard.server.queue.TbQueueConsumer; | ||
27 | +import org.thingsboard.server.queue.TbQueueProducer; | ||
28 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
29 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
30 | +import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
27 | 31 | ||
28 | /** | 32 | /** |
29 | * Responsible for initialization of various Producers and Consumers used by TB Core Node. | 33 | * Responsible for initialization of various Producers and Consumers used by TB Core Node. |
@@ -94,5 +98,5 @@ public interface TbCoreQueueFactory { | @@ -94,5 +98,5 @@ public interface TbCoreQueueFactory { | ||
94 | */ | 98 | */ |
95 | TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer(); | 99 | TbQueueProducer<TbProtoQueueMsg<TransportApiResponseMsg>> createTransportApiResponseProducer(); |
96 | 100 | ||
97 | - | 101 | + TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate(); |
98 | } | 102 | } |
@@ -15,14 +15,17 @@ | @@ -15,14 +15,17 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.queue.provider; | 16 | package org.thingsboard.server.queue.provider; |
17 | 17 | ||
18 | +import org.thingsboard.server.gen.js.JsInvokeProtos; | ||
18 | import org.thingsboard.server.gen.transport.TransportProtos; | 19 | import org.thingsboard.server.gen.transport.TransportProtos; |
19 | -import org.thingsboard.server.queue.TbQueueConsumer; | ||
20 | -import org.thingsboard.server.queue.TbQueueProducer; | ||
21 | -import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
22 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; | 20 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
23 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; | 21 | 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.ToRuleEngineNotificationMsg; | 22 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; |
23 | +import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; | ||
24 | +import org.thingsboard.server.queue.TbQueueConsumer; | ||
25 | +import org.thingsboard.server.queue.TbQueueProducer; | ||
26 | +import org.thingsboard.server.queue.TbQueueRequestTemplate; | ||
27 | +import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; | ||
28 | +import org.thingsboard.server.queue.common.TbProtoQueueMsg; | ||
26 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; | 29 | import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; |
27 | 30 | ||
28 | /** | 31 | /** |
@@ -82,4 +85,5 @@ public interface TbRuleEngineQueueFactory { | @@ -82,4 +85,5 @@ public interface TbRuleEngineQueueFactory { | ||
82 | */ | 85 | */ |
83 | TbQueueConsumer<TbProtoQueueMsg<ToRuleEngineNotificationMsg>> createToRuleEngineNotificationsMsgConsumer(); | 86 | TbQueueConsumer<TbProtoQueueMsg<ToRuleEngineNotificationMsg>> createToRuleEngineNotificationsMsgConsumer(); |
84 | 87 | ||
88 | + TbQueueRequestTemplate<TbProtoJsQueueMsg<JsInvokeProtos.RemoteJsRequest>, TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>> createRemoteJsRequestTemplate(); | ||
85 | } | 89 | } |
common/queue/src/main/java/org/thingsboard/server/queue/settings/TbQueueRemoteJsInvokeSettings.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.settings; | ||
17 | + | ||
18 | +import lombok.Data; | ||
19 | +import org.springframework.beans.factory.annotation.Value; | ||
20 | +import org.springframework.stereotype.Component; | ||
21 | + | ||
22 | +@Data | ||
23 | +@Component | ||
24 | +public class TbQueueRemoteJsInvokeSettings { | ||
25 | + @Value("${js.remote.request_topic}") | ||
26 | + private String requestTopic; | ||
27 | + | ||
28 | + @Value("${js.remote.response_topic_prefix}") | ||
29 | + private String responseTopic; | ||
30 | + | ||
31 | + @Value("${js.remote.max_pending_requests}") | ||
32 | + private long maxPendingRequests; | ||
33 | + | ||
34 | + @Value("${js.remote.response_poll_interval}") | ||
35 | + private int responsePollInterval; | ||
36 | + | ||
37 | + @Value("${js.remote.response_auto_commit_interval}") | ||
38 | + private int autoCommitInterval; | ||
39 | + | ||
40 | + @Value("${js.remote.max_requests_timeout}") | ||
41 | + private long maxRequestsTimeout; | ||
42 | +} |
common/queue/src/main/proto/jsinvoke.proto
renamed from
application/src/main/proto/jsinvoke.proto
@@ -19,6 +19,7 @@ const COMPILATION_ERROR = 0; | @@ -19,6 +19,7 @@ const COMPILATION_ERROR = 0; | ||
19 | const RUNTIME_ERROR = 1; | 19 | const RUNTIME_ERROR = 1; |
20 | const TIMEOUT_ERROR = 2; | 20 | const TIMEOUT_ERROR = 2; |
21 | const UNRECOGNIZED = -1; | 21 | const UNRECOGNIZED = -1; |
22 | +let headers; | ||
22 | 23 | ||
23 | const config = require('config'), | 24 | const config = require('config'), |
24 | logger = require('../config/logger')._logger('JsInvokeMessageProcessor'), | 25 | logger = require('../config/logger')._logger('JsInvokeMessageProcessor'), |
@@ -43,6 +44,7 @@ JsInvokeMessageProcessor.prototype.onJsInvokeMessage = function(message) { | @@ -43,6 +44,7 @@ JsInvokeMessageProcessor.prototype.onJsInvokeMessage = function(message) { | ||
43 | var responseTopic; | 44 | var responseTopic; |
44 | try { | 45 | try { |
45 | var request = JSON.parse(message.value.toString('utf8')); | 46 | var request = JSON.parse(message.value.toString('utf8')); |
47 | + headers = message.headers; | ||
46 | var buf = message.headers['requestId']; | 48 | var buf = message.headers['requestId']; |
47 | requestId = Utils.UUIDFromBuffer(buf); | 49 | requestId = Utils.UUIDFromBuffer(buf); |
48 | buf = message.headers['responseTopic']; | 50 | buf = message.headers['responseTopic']; |
@@ -148,7 +150,8 @@ JsInvokeMessageProcessor.prototype.sendResponse = function (requestId, responseT | @@ -148,7 +150,8 @@ JsInvokeMessageProcessor.prototype.sendResponse = function (requestId, responseT | ||
148 | messages: [ | 150 | messages: [ |
149 | { | 151 | { |
150 | key: scriptId, | 152 | key: scriptId, |
151 | - value: rawResponse | 153 | + value: rawResponse, |
154 | + headers: headers | ||
152 | } | 155 | } |
153 | ] | 156 | ] |
154 | } | 157 | } |