Add MySQL support for delayed message publishing#51
Merged
m110 merged 3 commits intoThreeDotsLabs:masterfrom Oct 22, 2025
Merged
Add MySQL support for delayed message publishing#51m110 merged 3 commits intoThreeDotsLabs:masterfrom
m110 merged 3 commits intoThreeDotsLabs:masterfrom
Conversation
Member
|
@AdrianZajkowski thanks for contributing! Can you check the tests? It seems the index is broken. |
Contributor
Author
|
@m110 should be fixed now ;) |
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Motivation / Background
This PR adds MySQL support for delayed message publishing. It is based on PostgreSQL implementation adapted to MySQL.
Currently only PostgreSQL is supported.
Details
The implementation adds five new files that provide MySQL - specific functionality:
delayed_mysql.go:
• DelayedMySQLPublisher wraps the standard publisher with Watermill's delay component
• DelayedMySQLSubscriber uses MySQL's new column
delayed_until• Automatically creates indexes on the delay metadata for optimal query performance
• Supports both required delays and optional "no delay" messages
queue_schema_adapter_mysql.go:
• Provides an alternative to consumer group-based processing
• Supports custom WHERE clauses for flexible message filtering
• Configurable batch sizes for performance tuning
• Uses FOR UPDATE locking to prevent message duplication
queue_offsets_adapter_mysql.go:
• Handles message acknowledgment through either deletion or marking as acked
• Supports batch acknowledgment for better performance
• No consumer group support (by design - uses simple queue semantics)
Checklist
The resources of our team are limited. There are a couple of things that you can do to help us merge your PR faster:
make up.make test_shortfor a quick check.make test.