Hi @abu,
First is correct. Messages are delivered by the Solace API and presented to the Application. Providing the application is still connected and bound to the queue, the API has done its job, and is waiting for you to tell it you’ve finished with the message (by calling acknowledge). However, if the flow unbinds, the API/broker combination assumes something has gone wrong in the application. Messages that were sent to the API but not acked by the application are marked as redelivered. Next time an application binds they are resent and presented to the application again, provided the messages redelivery count isn’t exceeded. The redelivery count functionality is there to prevent a badly formed message or application continuously failing and re-binding - the “poison message” scenario.
Second (nack): It’s on the roadmap. Currently, your options are to unbind and rebind (resource intensive and a little painful) or initiate replay (which you’ve said you can’t do.)