⚠️ Version 0.19.0 has minor breaking changes for the Worker.Middleware
, introduced fairly recently in 0.17.0 that has a worker's Middleware
function now taking a non-generic JobRow
parameter instead of a generic Job[T]
. We tried not to make this change, but found the existing middleware interface insufficient to provide the necessary range of functionality we wanted, and this is a secondary middleware facility that won't be in use for many users, so it seemed worthwhile.
Added
- Added a new "hooks" API for tying into River functionality at various points like job inserts or working. Differs from middleware in that it doesn't go on the stack and can't modify context, but in some cases is able to run at a more granular level (e.g. for each job insert rather than each batch of inserts). PR #789.
river.Config
has a genericMiddleware
setting that can be used as a convenient way to configure middlewares that implement multiple middleware interfaces (e.g.JobInsertMiddleware
andWorkerMiddleware
). Use of this setting is preferred overConfig.JobInsertMiddleware
andConfig.WorkerMiddleware
, which have been deprecated. PR #804.
Changed
- The
river.RecordOutput
function now returns an error if the output is too large. The output is limited to 32MB in size. PR #782. - Breaking change: The
Worker
interface'sMiddleware
function now takes aJobRow
parameter instead of a genericJob[T]
. This was necessary to expand the potential of what middleware can do: by letting the executor extract a middleware stack from a worker before a job is fully unmarshaled, the middleware can also participate in the unmarshaling process. PR #783. JobList
has been reimplemented to use sqlc. PR #795.