go-rabbitmq icon indicating copy to clipboard operation
go-rabbitmq copied to clipboard

feat: added consumer.WaitForHandlers

Open astromechza opened this issue 6 months ago • 2 comments

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 because Close 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:

  1. 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.

  2. 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 :)

astromechza avatar Jan 03 '24 10:01 astromechza