refactored
This commit is contained in:
parent
eedb383845
commit
06c3caf082
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.thingsboard.server.queue.pubsub;
|
package org.thingsboard.server.queue.pubsub;
|
||||||
|
|
||||||
|
import com.google.api.gax.rpc.AlreadyExistsException;
|
||||||
import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
|
import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
|
||||||
import com.google.cloud.pubsub.v1.SubscriptionAdminSettings;
|
import com.google.cloud.pubsub.v1.SubscriptionAdminSettings;
|
||||||
import com.google.cloud.pubsub.v1.TopicAdminClient;
|
import com.google.cloud.pubsub.v1.TopicAdminClient;
|
||||||
@ -24,9 +25,9 @@ import com.google.pubsub.v1.ListSubscriptionsRequest;
|
|||||||
import com.google.pubsub.v1.ListTopicsRequest;
|
import com.google.pubsub.v1.ListTopicsRequest;
|
||||||
import com.google.pubsub.v1.ProjectName;
|
import com.google.pubsub.v1.ProjectName;
|
||||||
import com.google.pubsub.v1.ProjectSubscriptionName;
|
import com.google.pubsub.v1.ProjectSubscriptionName;
|
||||||
import com.google.pubsub.v1.ProjectTopicName;
|
|
||||||
import com.google.pubsub.v1.Subscription;
|
import com.google.pubsub.v1.Subscription;
|
||||||
import com.google.pubsub.v1.Topic;
|
import com.google.pubsub.v1.Topic;
|
||||||
|
import com.google.pubsub.v1.TopicName;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.thingsboard.server.queue.TbQueueAdmin;
|
import org.thingsboard.server.queue.TbQueueAdmin;
|
||||||
|
|
||||||
@ -103,7 +104,10 @@ public class TbPubSubAdmin implements TbQueueAdmin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createTopicIfNotExists(String partition) {
|
public void createTopicIfNotExists(String partition) {
|
||||||
ProjectTopicName topicName = ProjectTopicName.of(pubSubSettings.getProjectId(), partition);
|
TopicName topicName = TopicName.newBuilder()
|
||||||
|
.setTopic(partition)
|
||||||
|
.setProject(pubSubSettings.getProjectId())
|
||||||
|
.build();
|
||||||
|
|
||||||
if (topicSet.contains(topicName.toString())) {
|
if (topicSet.contains(topicName.toString())) {
|
||||||
createSubscriptionIfNotExists(partition, topicName);
|
createSubscriptionIfNotExists(partition, topicName);
|
||||||
@ -121,13 +125,18 @@ public class TbPubSubAdmin implements TbQueueAdmin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
topicAdminClient.createTopic(topicName);
|
topicAdminClient.createTopic(topicName);
|
||||||
topicSet.add(topicName.toString());
|
|
||||||
log.info("Created new topic: [{}]", topicName.toString());
|
log.info("Created new topic: [{}]", topicName.toString());
|
||||||
|
} catch (AlreadyExistsException e) {
|
||||||
|
log.info("[{}] Topic already exist.", topicName.toString());
|
||||||
|
} finally {
|
||||||
|
topicSet.add(topicName.toString());
|
||||||
|
}
|
||||||
createSubscriptionIfNotExists(partition, topicName);
|
createSubscriptionIfNotExists(partition, topicName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createSubscriptionIfNotExists(String partition, ProjectTopicName topicName) {
|
private void createSubscriptionIfNotExists(String partition, TopicName topicName) {
|
||||||
ProjectSubscriptionName subscriptionName =
|
ProjectSubscriptionName subscriptionName =
|
||||||
ProjectSubscriptionName.of(pubSubSettings.getProjectId(), partition);
|
ProjectSubscriptionName.of(pubSubSettings.getProjectId(), partition);
|
||||||
|
|
||||||
@ -153,9 +162,14 @@ public class TbPubSubAdmin implements TbQueueAdmin {
|
|||||||
setAckDeadline(subscriptionBuilder);
|
setAckDeadline(subscriptionBuilder);
|
||||||
setMessageRetention(subscriptionBuilder);
|
setMessageRetention(subscriptionBuilder);
|
||||||
|
|
||||||
|
try {
|
||||||
subscriptionAdminClient.createSubscription(subscriptionBuilder.build());
|
subscriptionAdminClient.createSubscription(subscriptionBuilder.build());
|
||||||
subscriptionSet.add(subscriptionName.toString());
|
|
||||||
log.info("Created new subscription: [{}]", subscriptionName.toString());
|
log.info("Created new subscription: [{}]", subscriptionName.toString());
|
||||||
|
} catch (AlreadyExistsException e) {
|
||||||
|
log.info("[{}] Subscription already exist.", subscriptionName.toString());
|
||||||
|
} finally {
|
||||||
|
subscriptionSet.add(subscriptionName.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setAckDeadline(Subscription.Builder builder) {
|
private void setAckDeadline(Subscription.Builder builder) {
|
||||||
|
|||||||
@ -134,6 +134,11 @@ public class TbPubSubConsumerTemplate<T extends TbQueueMsg> implements TbQueueCo
|
|||||||
if (!subscribed) {
|
if (!subscribed) {
|
||||||
subscriptionNames = partitions.stream().map(TopicPartitionInfo::getFullTopicName).collect(Collectors.toSet());
|
subscriptionNames = partitions.stream().map(TopicPartitionInfo::getFullTopicName).collect(Collectors.toSet());
|
||||||
subscriptionNames.forEach(admin::createTopicIfNotExists);
|
subscriptionNames.forEach(admin::createTopicIfNotExists);
|
||||||
|
|
||||||
|
if (consumerExecutor != null) {
|
||||||
|
consumerExecutor.shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
consumerExecutor = Executors.newFixedThreadPool(subscriptionNames.size());
|
consumerExecutor = Executors.newFixedThreadPool(subscriptionNames.size());
|
||||||
messagesPerTopic = pubSubSettings.getMaxMessages() / subscriptionNames.size();
|
messagesPerTopic = pubSubSettings.getMaxMessages() / subscriptionNames.size();
|
||||||
subscribed = true;
|
subscribed = true;
|
||||||
|
|||||||
@ -124,8 +124,8 @@ public class TbPubSubProducerTemplate<T extends TbQueueMsg> implements TbQueuePr
|
|||||||
publisherMap.put(topic, publisher);
|
publisherMap.put(topic, publisher);
|
||||||
return publisher;
|
return publisher;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.error("Failed to create topic [{}].", topic, e);
|
log.error("Failed to create Publisher for the topic [{}].", topic, e);
|
||||||
throw new RuntimeException("Failed to create topic.", e);
|
throw new RuntimeException("Failed to create Publisher for the topic.", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -59,13 +59,11 @@ function PubSubProducer() {
|
|||||||
|
|
||||||
const topicList = await pubSubClient.getTopics();
|
const topicList = await pubSubClient.getTopics();
|
||||||
|
|
||||||
if (topicList) {
|
|
||||||
if (topicList) {
|
if (topicList) {
|
||||||
topicList[0].forEach(topic => {
|
topicList[0].forEach(topic => {
|
||||||
topics.push(getName(topic.name));
|
topics.push(getName(topic.name));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const subscriptionList = await pubSubClient.getSubscriptions();
|
const subscriptionList = await pubSubClient.getSubscriptions();
|
||||||
|
|
||||||
@ -100,23 +98,32 @@ function PubSubProducer() {
|
|||||||
|
|
||||||
async function createTopic(topic) {
|
async function createTopic(topic) {
|
||||||
if (!topics.includes(topic)) {
|
if (!topics.includes(topic)) {
|
||||||
|
try {
|
||||||
await pubSubClient.createTopic(topic);
|
await pubSubClient.createTopic(topic);
|
||||||
topics.push(topic);
|
|
||||||
logger.info('Created new Pub/Sub topic: %s', topic);
|
logger.info('Created new Pub/Sub topic: %s', topic);
|
||||||
|
} catch (e) {
|
||||||
|
logger.info('Pub/Sub topic already exists');
|
||||||
|
}
|
||||||
|
topics.push(topic);
|
||||||
}
|
}
|
||||||
await createSubscription(topic)
|
await createSubscription(topic)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function createSubscription(topic) {
|
async function createSubscription(topic) {
|
||||||
if (!subscriptions.includes(topic)) {
|
if (!subscriptions.includes(topic)) {
|
||||||
|
try {
|
||||||
await pubSubClient.createSubscription(topic, topic, {
|
await pubSubClient.createSubscription(topic, topic, {
|
||||||
topic: topic,
|
topic: topic,
|
||||||
subscription: topic,
|
subscription: topic,
|
||||||
ackDeadlineSeconds: queueProps['ackDeadlineInSec'],
|
ackDeadlineSeconds: queueProps['ackDeadlineInSec'],
|
||||||
messageRetentionDuration: {seconds: queueProps['messageRetentionInSec']}
|
messageRetentionDuration: {seconds: queueProps['messageRetentionInSec']}
|
||||||
});
|
});
|
||||||
subscriptions.push(topic);
|
|
||||||
logger.info('Created new Pub/Sub subscription: %s', topic);
|
logger.info('Created new Pub/Sub subscription: %s', topic);
|
||||||
|
} catch (e) {
|
||||||
|
logger.info('Pub/Sub subscription already exists.');
|
||||||
|
}
|
||||||
|
|
||||||
|
subscriptions.push(topic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@ -95,7 +95,7 @@
|
|||||||
<snakeyaml.version>1.25</snakeyaml.version>
|
<snakeyaml.version>1.25</snakeyaml.version>
|
||||||
<struts.version>1.3.10</struts.version>
|
<struts.version>1.3.10</struts.version>
|
||||||
<amazonaws.sqs.version>1.11.747</amazonaws.sqs.version>
|
<amazonaws.sqs.version>1.11.747</amazonaws.sqs.version>
|
||||||
<pubsub.client.version>1.84.0</pubsub.client.version>
|
<pubsub.client.version>1.105.0</pubsub.client.version>
|
||||||
<azure-servicebus.version>3.2.0</azure-servicebus.version>
|
<azure-servicebus.version>3.2.0</azure-servicebus.version>
|
||||||
<passay.version>1.5.0</passay.version>
|
<passay.version>1.5.0</passay.version>
|
||||||
<ua-parser.version>1.4.3</ua-parser.version>
|
<ua-parser.version>1.4.3</ua-parser.version>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user