js-executor - improved lifecycle events and added kill for crash event

This commit is contained in:
Sergey Matvienko 2022-10-27 15:22:45 +03:00
parent 6c9ad0399d
commit 5776f5b39b
2 changed files with 17 additions and 9 deletions

View File

@ -30,6 +30,8 @@ import {
TopicMessages TopicMessages
} from 'kafkajs'; } from 'kafkajs';
import process, { kill, exit } from 'process';
export class KafkaTemplate implements IQueue { export class KafkaTemplate implements IQueue {
private logger = _logger(`kafkaTemplate`); private logger = _logger(`kafkaTemplate`);
@ -122,6 +124,7 @@ export class KafkaTemplate implements IQueue {
this.logger.error(`Got consumer CRASH event, should restart: ${e.payload.restart}`); this.logger.error(`Got consumer CRASH event, should restart: ${e.payload.restart}`);
if (!e.payload.restart) { if (!e.payload.restart) {
this.logger.error('Going to exit due to not retryable error!'); this.logger.error('Going to exit due to not retryable error!');
kill(process.pid, 'SIGTERM'); //sending signal to myself process to trigger the handler
await this.destroy(); await this.destroy();
} }
}); });
@ -253,6 +256,7 @@ export class KafkaTemplate implements IQueue {
} }
} }
this.logger.info('Kafka resources stopped.'); this.logger.info('Kafka resources stopped.');
exit(0); //same as in version before
} }
private async disconnectProducer(): Promise<void> { private async disconnectProducer(): Promise<void> {

View File

@ -81,6 +81,7 @@ process.on('exit', (code: number) => {
async function exit(status: number) { async function exit(status: number) {
logger.info('Exiting with status: %d ...', status); logger.info('Exiting with status: %d ...', status);
try {
if (httpServer) { if (httpServer) {
const _httpServer = httpServer; const _httpServer = httpServer;
httpServer = null; httpServer = null;
@ -91,5 +92,8 @@ async function exit(status: number) {
queues = null; queues = null;
await _queues.destroy(); await _queues.destroy();
} }
} catch (e) {
logger.error('Error on exit');
}
process.exit(status); process.exit(status);
} }