|
|
|
|
|
by asguy
1150 days ago
|
|
I think you're projecting an implementation of a queue in Postgres, which isn't how most people implement these things. [0] We're not doing table level locks, or creating contention with multiple queue producers or consumers, and they're not "one typo away from disaster in prod". To do this right, you're using row level locking e.g. SELECT FOR UPDATE/SKIP LOCKED [1], and hopefully you're already using idle_in_transaction_session_timeout to deal with total consumer failures. A properly designed queue in Postgres runs more-or-less in parallel, and supports (really fantastic features like) atomic row locks across all resources needed to serve the queue request. If you need extremely long consumer timeouts, it's also totally fine to use RLLs in addition to state on the job itself. [0] - https://www.crunchydata.com/blog/message-queuing-using-nativ...
[1] - https://www.2ndquadrant.com/en/blog/what-is-select-skip-lock... |
|