Feature: Publisher.NotifyPublishWithReturn() for ordered return+confirmation handling #204
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
Currently,
NotifyPublish()
andNotifyReturn()
handlers run in separate goroutines, which can cause them to be processed out of order. This makes it challenging to properly link a returned message with their corresponding confirmation when handling unrouted messages.For mandatory publishes, the publisher might need to make a decision based on both the confirmation and message return. In such cases, the pairing is crucial.
Solution
According to the RabbitMQ documentation:
That was implemented in github.com/rabbitmq/amqp091-go channel.go
This PR introduces
Publisher.NotifyPublishWithReturn()
, a new method that ensures proper pairing of returns and confirmations according to RabbitMQ protocol ordering.Handler behavior:
Return{}
Return{}
Testing
I've added integration tests to cover the above behaviours
examples/publishers_confirms
is also updated with aNotifyPublishWithReturn()
call. Below is the test output:@wagslane Thoughts? 🙏