Merge pull request #6906 from vvlladd28/bug/js-executors/aws-sqs-queue
[3.4] Fix incorrect start JavaScript Executor AWS SQS queue
This commit is contained in:
commit
36de871027
@ -39,12 +39,6 @@ export function isString(value: any): boolean {
|
|||||||
return typeof value === 'string';
|
return typeof value === 'string';
|
||||||
}
|
}
|
||||||
|
|
||||||
export function sleep(ms: number): Promise<void> {
|
|
||||||
return new Promise((resolve) => {
|
|
||||||
setTimeout(resolve, ms);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function parseJsErrorDetails(err: any): string | undefined {
|
export function parseJsErrorDetails(err: any): string | undefined {
|
||||||
if (!err) {
|
if (!err) {
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|||||||
@ -34,7 +34,6 @@ import {
|
|||||||
SQSClient
|
SQSClient
|
||||||
} from '@aws-sdk/client-sqs';
|
} from '@aws-sdk/client-sqs';
|
||||||
import uuid from 'uuid-random';
|
import uuid from 'uuid-random';
|
||||||
import { sleep } from '../api/utils';
|
|
||||||
|
|
||||||
export class AwsSqsTemplate implements IQueue {
|
export class AwsSqsTemplate implements IQueue {
|
||||||
|
|
||||||
@ -48,11 +47,11 @@ export class AwsSqsTemplate implements IQueue {
|
|||||||
|
|
||||||
private sqsClient: SQSClient;
|
private sqsClient: SQSClient;
|
||||||
private requestQueueURL: string
|
private requestQueueURL: string
|
||||||
private stopped = false;
|
|
||||||
private queueUrls = new Map<string, string>();
|
private queueUrls = new Map<string, string>();
|
||||||
private queueAttributes: { [n: string]: string } = {
|
private queueAttributes: { [n: string]: string } = {
|
||||||
FifoQueue: 'true'
|
FifoQueue: 'true'
|
||||||
};
|
};
|
||||||
|
private timer: NodeJS.Timer;
|
||||||
|
|
||||||
name = 'AWS SQS';
|
name = 'AWS SQS';
|
||||||
|
|
||||||
@ -91,10 +90,12 @@ export class AwsSqsTemplate implements IQueue {
|
|||||||
const params: ReceiveMessageRequest = {
|
const params: ReceiveMessageRequest = {
|
||||||
MaxNumberOfMessages: 10,
|
MaxNumberOfMessages: 10,
|
||||||
QueueUrl: this.requestQueueURL,
|
QueueUrl: this.requestQueueURL,
|
||||||
WaitTimeSeconds: this.pollInterval / 1000
|
WaitTimeSeconds: Math.ceil(this.pollInterval / 10)
|
||||||
};
|
};
|
||||||
while (!this.stopped) {
|
this.timer = setTimeout(() => {this.getAndProcessMessage(messageProcessor, params)}, this.pollInterval);
|
||||||
let pollStartTs = new Date().getTime();
|
}
|
||||||
|
|
||||||
|
private async getAndProcessMessage(messageProcessor: JsInvokeMessageProcessor, params: ReceiveMessageRequest) {
|
||||||
const messagesResponse: ReceiveMessageResult = await this.sqsClient.send(new ReceiveMessageCommand(params));
|
const messagesResponse: ReceiveMessageResult = await this.sqsClient.send(new ReceiveMessageCommand(params));
|
||||||
const messages = messagesResponse.Messages;
|
const messages = messagesResponse.Messages;
|
||||||
|
|
||||||
@ -118,13 +119,8 @@ export class AwsSqsTemplate implements IQueue {
|
|||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
this.logger.error("Failed to delete messages from queue.", err.message);
|
this.logger.error("Failed to delete messages from queue.", err.message);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
let pollDuration = new Date().getTime() - pollStartTs;
|
|
||||||
if (pollDuration < this.pollInterval) {
|
|
||||||
await sleep(this.pollInterval - pollDuration);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
this.timer = setTimeout(() => {this.getAndProcessMessage(messageProcessor, params)}, this.pollInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
async send(responseTopic: string, scriptId: string, rawResponse: Buffer, headers: any): Promise<any> {
|
async send(responseTopic: string, scriptId: string, rawResponse: Buffer, headers: any): Promise<any> {
|
||||||
@ -182,8 +178,8 @@ export class AwsSqsTemplate implements IQueue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async destroy(): Promise<void> {
|
async destroy(): Promise<void> {
|
||||||
this.stopped = true;
|
|
||||||
this.logger.info('Stopping AWS SQS resources...');
|
this.logger.info('Stopping AWS SQS resources...');
|
||||||
|
clearTimeout(this.timer);
|
||||||
if (this.sqsClient) {
|
if (this.sqsClient) {
|
||||||
this.logger.info('Stopping AWS SQS client...');
|
this.logger.info('Stopping AWS SQS client...');
|
||||||
try {
|
try {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user