@vendure/core
Version:
A modern, headless ecommerce framework
121 lines (120 loc) • 4.31 kB
TypeScript
import { Type } from '@vendure/common/lib/shared-types';
import { DefaultJobQueueOptions } from './types';
/**
* @description
* A plugin which configures Vendure to use the SQL database to persist the JobQueue jobs using the {@link SqlJobQueueStrategy}. If you add this
* plugin to an existing Vendure installation, you'll need to run a [database migration](/guides/developer-guide/migrations), since this
* plugin will add a new "job_record" table to the database.
*
* @example
* ```ts
* import { DefaultJobQueuePlugin, VendureConfig } from '\@vendure/core';
*
* export const config: VendureConfig = {
* // Add an instance of the plugin to the plugins array
* plugins: [
* DefaultJobQueuePlugin,
* ],
* };
* ```
*
* ## Configuration
*
* It is possible to configure the behaviour of the {@link SqlJobQueueStrategy} by passing options to the static `init()` function:
*
* ### pollInterval
* The interval in ms between polling for new jobs. The default is 200ms.
* Using a longer interval reduces load on the database but results in a slight
* delay in processing jobs. For more control, it is possible to supply a function which can specify
* a pollInterval based on the queue name:
*
* @example
* ```ts
* export const config: VendureConfig = {
* plugins: [
* DefaultJobQueuePlugin.init({
* pollInterval: queueName => {
* if (queueName === 'cart-recovery-email') {
* // This queue does not need to be polled so frequently,
* // so we set a longer interval in order to reduce load
* // on the database.
* return 10000;
* }
* return 200;
* },
* }),
* ],
* };
* ```
* ### concurrency
* The number of jobs to process concurrently per worker. Defaults to 1.
*
* ### backoffStrategy
* Defines the backoff strategy used when retrying failed jobs. In other words, if a job fails
* and is configured to be re-tried, how long should we wait before the next attempt?
*
* By default, a job will be retried as soon as possible, but in some cases this is not desirable. For example,
* a job may interact with an unreliable 3rd-party API which is sensitive to too many requests. In this case, an
* exponential backoff may be used which progressively increases the delay between each subsequent retry.
*
* @example
* ```ts
* export const config: VendureConfig = {
* plugins: [
* DefaultJobQueuePlugin.init({
* pollInterval: 5000,
* concurrency: 2
* backoffStrategy: (queueName, attemptsMade, job) => {
* if (queueName === 'transcode-video') {
* // exponential backoff example
* return (attemptsMade ** 2) * 1000;
* }
*
* // A default delay for all other queues
* return 1000;
* },
* setRetries: (queueName, job) => {
* if (queueName === 'send-email') {
* // Override the default number of retries
* // for the 'send-email' job because we have
* // a very unreliable email service.
* return 10;
* }
* return job.retries;
* }
* }),
* ],
* };
* ```
*
* ### Removing old jobs
* Since v3.3, the job queue will automatically remove old jobs from the database. This is done by a scheduled task
* which runs every 2 hours by default. The number of jobs to keep in the database can be configured using the
* `keepJobsCount` option. The default is 1000.
*
* @example
* ```ts
* export const config: VendureConfig = {
* plugins: [
* DefaultJobQueuePlugin.init({
* // The number of completed/failed/cancelled
* // jobs to keep in the database. The default is 1000.
* keepJobsCount: 100,
* // The interval at which to run the clean-up task.
* // This can be a standard cron expression or a function
* // that returns a cron expression. The default is every 2 hours.
* cleanJobsSchedule: cron => cron.every(5).hours(),
* }),
* ],
* };
* ```
*
* @docsCategory JobQueue
* @docsPage DefaultJobQueuePlugin
* @docsWeight 0
*/
export declare class DefaultJobQueuePlugin {
/** @internal */
static options: DefaultJobQueueOptions;
static init(options: DefaultJobQueueOptions): Type<DefaultJobQueuePlugin>;
}