taskiq-python / taskiq

Distributed task queue with full async support
MIT License
689 stars 44 forks source link

Change message acknowledgement #317

Open sfendourakis opened 2 months ago

sfendourakis commented 2 months ago

This proposed solution addresses an issue encountered when attempting to utilize acknowledgment functionality.

Currently, the Receiver module contains two types of messages: AckableMessage originating from the broker, which includes an ack method to be executed upon task completion for acknowledging the message, and TaskiqMessage containing execution information passed to the run_task method responsible for task execution.

The challenge arises when a task encounters an exception, as there is presently no mechanism to modify the behavior of the ack method, resulting in automatic acknowledgment of the message. To mitigate this, we have introduced the passing of the ack method within the TaskiqMessage. This grants access to the ack method within the run_task context, enabling us to utilize a TaskiqMiddleware.on_error method. This method accepts the TaskiqMessage and adjusts the behavior of the ack method according to the desired logic in the event of a task failure.

Returning to the Receiver, the updated ack method will now be executed, resolving the issue of unintended acknowledgments for failed tasks.

While this solution addresses the immediate challenge, it's important to recognize that there may be alternative approaches. I welcome any feedback, suggestions, or alternative solutions.