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
+4 -1
View File
@@ -64,6 +64,9 @@ type EventMap = {
'assets.delete': [{ assetIds: string[]; userId: string }];
'assets.restore': [{ assetIds: string[]; userId: string }];
'queue.pause': [QueueName];
'queue.resume': [QueueName];
'job.start': [QueueName, JobItem];
'job.failed': [{ job: JobItem; error: Error | any }];
@@ -85,7 +88,7 @@ type EventMap = {
'websocket.connect': [{ userId: string }];
};
export const serverEvents = ['config.update'] as const;
export const serverEvents = ['config.update', 'queue.pause', 'queue.resume'] as const;
export type ServerEvents = (typeof serverEvents)[number];
export type EmitEvent = keyof EventMap;