Different ways to implement Transactional Outbox pattern for PostgreSQL. Each way is in own branch:
- master - basic implementation (long transaction, one worker, can miss messages). 1-basic-version-advisory-lock - advisory lock instead of long transaction
- 2-lock-messages-for-update - lock each message for update (broken messages order, long transaction)
- 3-pessimistic-lock-messages - pessimistic lock each message (removed long transaction)
- 4-virtual-partitions-transaction-id - virtual partitions (read messages to send can stuck because of long transaction)
- 5-virtual-partition-with-sequence - virtual partition with synchronized insert to messages table (write messages can stuck on long transaction)
- 6-virtual-partition-no-missing-ids - virtual partitions without missing numbers for each partition