All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.lambda.powertools.sqs.internal.SqsMessageBatchProcessorAspect Maven / Gradle / Ivy

package software.amazon.lambda.powertools.sqs.internal;

import com.amazonaws.services.lambda.runtime.events.SQSEvent;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import software.amazon.lambda.powertools.sqs.SqsBatch;

import static software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor.isHandlerMethod;
import static software.amazon.lambda.powertools.sqs.SqsUtils.batchProcessor;
import static software.amazon.lambda.powertools.sqs.internal.SqsLargeMessageAspect.placedOnSqsEventRequestHandler;

@Aspect
public class SqsMessageBatchProcessorAspect {

    @SuppressWarnings({"EmptyMethod"})
    @Pointcut("@annotation(sqsBatch)")
    public void callAt(SqsBatch sqsBatch) {
    }

    @Around(value = "callAt(sqsBatch) && execution(@SqsBatch * *.*(..))", argNames = "pjp,sqsBatch")
    public Object around(ProceedingJoinPoint pjp,
                         SqsBatch sqsBatch) throws Throwable {
        Object[] proceedArgs = pjp.getArgs();

        if (isHandlerMethod(pjp)
                && placedOnSqsEventRequestHandler(pjp)) {

            SQSEvent sqsEvent = (SQSEvent) proceedArgs[0];

            batchProcessor(sqsEvent,
                    sqsBatch.suppressException(),
                    sqsBatch.value(),
                    sqsBatch.deleteNonRetryableMessageFromQueue(),
                    sqsBatch.nonRetryableExceptions());
        }

        return pjp.proceed(proceedArgs);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy