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.
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 anack
method to be executed upon task completion for acknowledging the message, andTaskiqMessage
containing execution information passed to therun_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 theack
method within theTaskiqMessage
. This grants access to theack
method within therun_task
context, enabling us to utilize aTaskiqMiddleware.on_error
method. This method accepts theTaskiqMessage
and adjusts the behavior of theack
method according to the desired logic in the event of a task failure.Returning to the
Receiver
, the updatedack
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.