@raminder chima For the function issue please verify if you have configured the prefetchCount value in your host.json? Please share your host.json configuration for service bus and how much time will it take for a single message to get consumed. In case if you have specified the high value for prefetchCount and one message takes more time than your maxAutoRenewDuration then in case all the messages lock acquired in the client buffer will get expired and the message will be again visible for your client to get consumed. In the scenario, if you have configured the max delivery count as 1 on your service bus entity and enabled the "dead letter on message expiration" property and the client is not able to consume the message then your message should move to the dead letter queue.
The message is moved to the dead letter queue in the different scenarios as mentioned here and not only depended on the TTL that you have configured on your entity/message level.
You can leverage service bus explorer to find the reason why the messages were moved to the dead letter queue.