2022-07-07 12:43:22 +03:00
|
|
|
///
|
|
|
|
|
/// Copyright © 2016-2022 The Thingsboard Authors
|
|
|
|
|
///
|
|
|
|
|
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
/// you may not use this file except in compliance with the License.
|
|
|
|
|
/// You may obtain a copy of the License at
|
|
|
|
|
///
|
|
|
|
|
/// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
///
|
|
|
|
|
/// Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
/// See the License for the specific language governing permissions and
|
|
|
|
|
/// limitations under the License.
|
|
|
|
|
///
|
|
|
|
|
|
|
|
|
|
import config from 'config';
|
|
|
|
|
import { _logger } from './config/logger';
|
|
|
|
|
import { HttpServer } from './api/httpServer';
|
|
|
|
|
import { IQueue } from './queue/queue.models';
|
|
|
|
|
import { KafkaTemplate } from './queue/kafkaTemplate';
|
|
|
|
|
import { PubSubTemplate } from './queue/pubSubTemplate';
|
|
|
|
|
import { AwsSqsTemplate } from './queue/awsSqsTemplate';
|
|
|
|
|
import { RabbitMqTemplate } from './queue/rabbitmqTemplate';
|
|
|
|
|
import { ServiceBusTemplate } from './queue/serviceBusTemplate';
|
|
|
|
|
|
|
|
|
|
const logger = _logger('main');
|
|
|
|
|
|
|
|
|
|
logger.info('===CONFIG BEGIN===');
|
|
|
|
|
logger.info(JSON.stringify(config, null, 4));
|
|
|
|
|
logger.info('===CONFIG END===');
|
|
|
|
|
|
|
|
|
|
const serviceType = config.get('queue_type');
|
|
|
|
|
const httpPort = Number(config.get('http_port'));
|
2022-07-07 17:15:59 +03:00
|
|
|
let queues: IQueue | null;
|
|
|
|
|
let httpServer: HttpServer | null;
|
2022-07-07 12:43:22 +03:00
|
|
|
|
|
|
|
|
(async () => {
|
2022-07-07 17:15:59 +03:00
|
|
|
logger.info('Starting ThingsBoard JavaScript Executor Microservice...');
|
2022-07-07 12:43:22 +03:00
|
|
|
switch (serviceType) {
|
|
|
|
|
case 'kafka':
|
2022-07-07 17:15:59 +03:00
|
|
|
logger.info('Starting Kafka template...');
|
2022-07-07 12:43:22 +03:00
|
|
|
queues = await KafkaTemplate.build();
|
2022-07-07 17:15:59 +03:00
|
|
|
logger.info('Kafka template started.');
|
2022-07-07 12:43:22 +03:00
|
|
|
break;
|
|
|
|
|
case 'pubsub':
|
2022-07-07 17:15:59 +03:00
|
|
|
logger.info('Starting Pub/Sub template...')
|
2022-07-07 12:43:22 +03:00
|
|
|
queues = await PubSubTemplate.build();
|
|
|
|
|
logger.info('Pub/Sub template started.')
|
|
|
|
|
break;
|
|
|
|
|
case 'aws-sqs':
|
2022-07-07 17:15:59 +03:00
|
|
|
logger.info('Starting AWS SQS template...')
|
2022-07-07 12:43:22 +03:00
|
|
|
queues = await AwsSqsTemplate.build();
|
2022-07-07 17:15:59 +03:00
|
|
|
logger.info('AWS SQS template started.')
|
2022-07-07 12:43:22 +03:00
|
|
|
break;
|
|
|
|
|
case 'rabbitmq':
|
2022-07-07 17:15:59 +03:00
|
|
|
logger.info('Starting RabbitMQ template...')
|
2022-07-07 12:43:22 +03:00
|
|
|
queues = await RabbitMqTemplate.build();
|
2022-07-07 17:15:59 +03:00
|
|
|
logger.info('RabbitMQ template started.')
|
2022-07-07 12:43:22 +03:00
|
|
|
break;
|
|
|
|
|
case 'service-bus':
|
2022-07-07 17:15:59 +03:00
|
|
|
logger.info('Starting Azure Service Bus template...')
|
2022-07-07 12:43:22 +03:00
|
|
|
queues = await ServiceBusTemplate.build();
|
|
|
|
|
logger.info('Azure Service Bus template started.')
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
logger.error('Unknown service type: ', serviceType);
|
|
|
|
|
process.exit(-1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
httpServer = new HttpServer(httpPort);
|
|
|
|
|
})();
|
|
|
|
|
|
2022-07-07 17:15:59 +03:00
|
|
|
[`SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `SIGTERM`].forEach((eventType) => {
|
|
|
|
|
process.on(eventType, async () => {
|
|
|
|
|
logger.info(`${eventType} signal received`);
|
|
|
|
|
if (httpServer) {
|
|
|
|
|
const _httpServer = httpServer;
|
|
|
|
|
httpServer = null;
|
|
|
|
|
await _httpServer.stop();
|
|
|
|
|
}
|
|
|
|
|
if (queues) {
|
|
|
|
|
const _queues = queues;
|
|
|
|
|
queues = null;
|
|
|
|
|
await _queues.destroy(0);
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
})
|
2022-07-07 12:43:22 +03:00
|
|
|
|
2022-07-07 17:15:59 +03:00
|
|
|
process.on('exit', (code: number) => {
|
|
|
|
|
logger.info(`JavaScript Executor Microservice has been stopped. Exit code: ${code}.`);
|
2022-07-07 12:43:22 +03:00
|
|
|
});
|