feat: Use postgres as a queue

We've been keen to try this for a while as it means we can remove redis as a
dependency, which makes Immich easier to setup and run.

This replaces bullmq with a bespoke postgres queue. Jobs in the queue are
processed either immediately via triggers and notifications, or eventually if a
notification is missed.
This commit is contained in:
Thomas Way
2025-04-30 20:43:51 +01:00
parent b845184c80
commit 8c0c8a8d0e
46 changed files with 731 additions and 915 deletions
+3 -3
View File
@@ -26,7 +26,7 @@ class JobCommand {
static const start = JobCommand._(r'start');
static const pause = JobCommand._(r'pause');
static const resume = JobCommand._(r'resume');
static const empty = JobCommand._(r'empty');
static const clear = JobCommand._(r'clear');
static const clearFailed = JobCommand._(r'clear-failed');
/// List of all possible values in this [enum][JobCommand].
@@ -34,7 +34,7 @@ class JobCommand {
start,
pause,
resume,
empty,
clear,
clearFailed,
];
@@ -77,7 +77,7 @@ class JobCommandTypeTransformer {
case r'start': return JobCommand.start;
case r'pause': return JobCommand.pause;
case r'resume': return JobCommand.resume;
case r'empty': return JobCommand.empty;
case r'clear': return JobCommand.clear;
case r'clear-failed': return JobCommand.clearFailed;
default:
if (!allowNull) {