# Install this plugin
npm install @pinelab/vendure-plugin-google-cloud-tasks
Google Cloud Tasks Vendure plugin
Plugin for using Vendure worker with Google Cloud Tasks. This plugin will show ending, successful and failed jobs in the admin UI under sytem/jobs
, but not running jobs. Only jobs of the past 7 days are kept in the DB.
Getting started
Plugin setup
- Remove
DefaultJobQueuePlugin
from your vendure-config. Add this plugin to yourvendure-config.ts
:
import { CloudTasksPlugin } from '@pinelab/vendure-plugin-google-cloud-tasks';
plugins: [
CloudTasksPlugin.init({
// Must reachable by Google Cloud Task. Messages are pushed to this endpoint
taskHandlerHost: 'https://your-public-host/',
projectId: 'your-google-project-id',
// Region where the taskqueue should be created
location: 'europe-west1',
// Used to prevent unauithorized requests to your public endpoint
authSecret: 'some-secret-to-authenticate-incoming-messages',
/**
* Used to distinguish taskQueues within the same
* Google Project (if you have OTAP environments in the same project for example)
* This suffix will be appended to the queue name: "send-email-plugin-test"
*/
queueSuffix: 'plugin-test',
// Default amount of retries when no job.retries is given
defaultJobRetries: 15,
// The amount of retries when a job fails to be pushed to the queue
createTaskRetries: 3,
}),
];
- Start the Vendure server, log in to the admin dashboard and trigger a reindex job
via
Products > (cog icon) > reindex
to test the Cloud Tasks Plugin.
Clear jobs
You can call the endpoint /cloud-tasks/clear-jobs/X
with the secret as Auth header to clear jobs older than X days. For example:
curl -H "Authorization: Bearer some-secret-to-authenticate-cloud-tasks" "http://localhost:3050/cloud-tasks/clear-jobs/1"
Will clear all jobs older than 1 day.
FAQ
DEADLINE_EXCEEDED errors when pushing tasks to queue
When pushing multiple tasks concurrently to a queue in serverless environments, you might see DEADLINE_EXCEEDED
errors. If that happens, you can instantiate the plugin with fallback: true
to make the Google Cloud Tasks client fallback to HTTP instead of GRPC. For more details see https://github.com/googleapis/nodejs-tasks/issues/397#issuecomment-618580649
CloudTasksPlugin.init({
...
clientOptions: {
fallback: true
}
});
Request entity too large
This means the Job data is larger than NestJS's configured request limit. You can set a large limit in your vendure-config.ts
:
import { VendureConfig } from '@vendure/core';
import { json } from 'body-parser';
export const config: VendureConfig = {
// ...
apiOptions: {
middleware: [
{
handler: json({ limit: '10mb' }),
route: '*',
beforeListen: true,
},
],
},
};
We don't include this in the plugin, because it affects the entire NestJS instance