Thanks for reading and commenting.
1- I agree with you, I didn't pay attention while checking the SDK documentation. I have fixed the code. Thanks for pointing this out.
2 - There are some use cases for non-lambda listeners. For example when you simply don't use AWS (SQS is not your), when you already have a microservice and can reuse it by adding just one listener.
The reserve concurrency allows running only one instance of a given lambda at a time. But you still can't control the number of messages it process.
With the custom listener, you can control the number of messages you wanna process, so you have full control of the pace. For example, on one hand, you have a Loyalty API (legacy API) that can process only 100 per hour (just an example) and on another hand, you have a queue that receives 50 messages per hour during most hours of a day.
But let's say between 12:00 and 15:00 it receives 1000. In this period, the Loyalty API will throttle most of the messages. By controlling the pace you can process the rest of the messages in the low volume messages hours.