Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kabbouchi/adonisjs-jobs
Job processing for AdonisJS
https://github.com/kabbouchi/adonisjs-jobs
adonisjs background-jobs bullmq jobs queue redis
Last synced: 5 days ago
JSON representation
Job processing for AdonisJS
- Host: GitHub
- URL: https://github.com/kabbouchi/adonisjs-jobs
- Owner: KABBOUCHI
- License: mit
- Created: 2024-03-22T12:25:48.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-10-26T17:55:42.000Z (21 days ago)
- Last Synced: 2024-11-07T09:40:57.721Z (9 days ago)
- Topics: adonisjs, background-jobs, bullmq, jobs, queue, redis
- Language: TypeScript
- Homepage:
- Size: 53.7 KB
- Stars: 18
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
## Getting Started
This package is available in the npm registry.
```bash
pnpm install adonisjs-jobs
```Next, configure the package by running the following command.
```bash
node ace configure adonisjs-jobs
```## Creating Jobs
You can create a new job by running the following command.
```sh
node ace jobs:make SendEmail
```## Listening for Jobs
First, you need to start the jobs listener, you can spawn multiple listeners to process jobs concurrently.
```sh
node ace jobs:listen # default queue from env `REDIS_QUEUE`node ace jobs:listen --queue=high
node ace jobs:listen --queue=high --queue=medium
node ace jobs:listen --queue=high,medium,lownode ace jobs:listen --queue=high --concurrency=3
```## Dispatching Jobs
Dispatching jobs is as simple as importing the job class and calling
```ts
import SendEmail from 'path/to/jobs/send_email.js'await SendEmail.dispatch({ ... })
await SendEmail.dispatch({ ... }, { // for more job options check https://docs.bullmq.io/
attempts: 3,
delay: 1000,
})
```## Import Aliases (optional)
update your `package.json` and `tsconfig.json` to use import aliases
`package.json`
```json
{
"imports": {
"#jobs/*": "./app/jobs/*.js"
}
}
````tsconfig.json`
```json
{
"compilerOptions": {
"paths": {
"#jobs/*": ["./app/jobs/*.js"]
}
}
}
``````ts
import SendEmail from '#jobs/send_email.js'await SendEmail.dispatch({ ... })
```## Jobs Dashboard
You can view the jobs dashboard by adding the following route to your `start/routes.ts` file.
```ts
import router from '@adonisjs/core/services/router'router.jobs() // default is /jobs
// or
router.jobs('/my-jobs-dashboard')
````router.jobs()` returns a route group, you can add middleware to the group
```ts
router.jobs().use(
middleware.auth({
guards: ['basicAuth'],
})
)
```## Tips
### Job Completion on Kubernetes
In Kubernetes, prevent job termination by adjusting `terminationGracePeriodSeconds` (default is 30s) to allow jobs to finish gracefully.
```yaml
spec:
containers:
- name: listen-jobs
image:
command: ['node']
args: ['ace', 'jobs:listen']
terminationGracePeriodSeconds: 1800
```## Experimental Features
### Dispatch Closure
```ts
import { dispatch } from 'adonisjs-jobs/services/main'await dispatch(async () => {
const { default: User } = await import('#models/user')console.log(await User.query().count('*'))
})await dispatch(async () => {
const { default: mail } = await import('@adonisjs/mail/services/main')await mail.send((message) => {
message
.to('[email protected]')
.from('[email protected]')
.subject('Verify your email address')
.htmlView('emails/verify_email')
})
})
```