I have a lambda function called service A in 5 different region, and when they are sending a message at the same time together,
my lambda function called service B cannot receieve the message as a batch, but it received the message in seprate call , How can I achieve if service B can surely get the 5 message from lambda service A at one time instead of seprately getting them
Below is my code of SQS and lambda code set up
const queue = new Queue(this, 'SqsQueue', {
receiveMessageWaitTime: Duration.seconds(20),
visibilityTimeout: Duration.seconds(300)
})
queue.grantSendMessages(role)
const readSqsFn = new NodejsFunction(this, 'send', {
timeout: Duration.seconds(30),
reservedConcurrentExecutions: 1
})
const sesPolicy = new aws_iam.PolicyStatement({
actions: ["ses:SendEmail",
"ses:SendRawEmail"],
effect: aws_iam.Effect.ALLOW,
resources: ['*']
})
readSqsFn.addToRolePolicy(sesPolicy)
queue.grantConsumeMessages(readSqsFn)
readSqsFn.addEventSource(new SqsEventSource(queue, {
batchSize: 10
}))
export const handler = async (
event: SQSEvent,
context: any = {}
): Promise<any> => {
console.log(event.Records)
for (const record of event.Records) {
console.log('sqs record:', record?.body);
}
};
Thank you for your help!! it works! I set the window to 60 seconds and batch = 5 in my read sqs lambda function(Service B), since my lambda(Service A) is deployed in 5 different regions and when the message need to be sent from the SQS to the service B, now 4 records will be group together and send, and then the left 1 will be sent seprately , and sometimes 3 records will be grouped together and then the another 2 records are also group together then send from the SQS to the Service B, I wonder if it is impossible to guarantee that exactly 5 records, do not seprate any of those, can get from SQS and send to the Service B
Because of the distributed nature of SQS and the fact that you have very low number of messages, you can't guarantee this. If you will send a larger number of messages, most invocations will include the 5 records.
Did not try it, but if you switch to a FIFO queue, and use the same messgae group ID for all messages you send into the queue, it may also work.