Sobre el proyecto

River es una biblioteca de procesamiento de trabajos en segundo plano para Go que utiliza Postgres como su cola de trabajos. Está diseñada para que los datos de la aplicación y la cola de trabajos compartan la misma base de datos, lo que permite encolar trabajos de forma transaccional junto con otros cambios en la base de datos. Se garantiza que los trabajos se encolan si su transacción se confirma, se eliminan si se revierte y no son visibles para su procesamiento hasta que se confirme la transacción. Los trabajos se definen como pares de estructuras: una implementación de JobArgs con anotaciones json y una cadena "kind" estable, más una implementación de Worker que expone una función Work. Los trabajadores se registran al inicio para que River pueda mapear los tipos de trabajo a los trabajadores. Se crea un Cliente con un grupo de base de datos, un controlador y una configuración que contiene un paquete de Workers y configuraciones de cola. Los clientes pueden iniciarse y detenerse, con apagado gradual mediante cancelación de contexto o una llamada explícita a Stop. Los clientes de solo inserción pueden insertar trabajos sin procesarlos. Las características incluyen inserción de trabajos por lotes usando COPY FROM de Postgres, cancelación de trabajos desde dentro de una función de trabajo, manejo de errores y pánicos, múltiples colas para rendimiento y aislamiento, trabajos periódicos y cron, trabajos programados, trabajos con snooze, suscripciones a la actividad de la cola y estadísticas para telemetría, ayudas de prueba, finalización transaccional de trabajos, trabajos únicos por args/período/cola/estado, una interfaz web para inspeccionar trabajos y colas, y funciones de trabajo simplificadas. River también admite la inserción de trabajos desde Python y Ruby para encolado entre lenguajes, con trabajadores Go procesándolos. El proyecto está inspirado en bibliotecas de trabajos en segundo plano como Oban, Que, Sidekiq, Delayed::Job, GoodJob y Hangfire. La documentación, godoc, una interfaz de River y una demostración en vivo se referencian en el README.