Closed astromechza closed 1 month ago
I like this idea. I actually think .Close should just always wait for handlers though
I like this idea. I actually think .Close should just always wait for handlers though
How to finish the handlers gracefully?
Hello @astromechza, I've made some changes to support handlers completion in consumer.Close:
I'm going to close this PR since #166 seems like a better approach :)
I'd like to propose adding a
WaitForHandlers
method to the consumer which waits for any running handlers to complete processing their current messages. This is becauseClose
doesn't wait for the handlers to finish or queue to be drained (this makes sense).This solves a couple of issues I've been facing:
Some message handling may be performing actions that need to clean up properly: file/database IO, external requests, even when idempotent may cause corruptions if the handlers are interrupted without being allowed to shutdown safely.
Applying a circuit breaking pattern to stop a handler from consuming new messages if they are failing frequently due to overload or dependency failures.
The code in this PR could be added to the handler method itself, but I think it may be a useful pattern that others may take advantage of so I'd like to consider including it in this library.
Happy to discuss further :)