# nestjs-message-bus

> Message Bus implementation for nest-js

Latest version **0.0.60** (published 2021-11-03) · 0 weekly downloads

## Install

```sh
npm install nestjs-message-bus
pnpm add nestjs-message-bus
yarn add nestjs-message-bus
bun add nestjs-message-bus
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.60 |
| Published | 2021-11-03 |
| First published | 2021-09-14 |
| Weekly downloads | 0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 54.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | Ashish K. Poudel |
| Maintainers | ashish_outside |

## Links

- npm: https://www.npmjs.com/package/nestjs-message-bus
- Repository: https://github.com/pagevamp/nestjs-message-bus
- Homepage: https://github.com/pagevamp/nestjs-message-bus#readme
- Issues: https://github.com/pagevamp/nestjs-message-bus/issues
- npm.io page: https://npm.io/package/nestjs-message-bus

## Dependencies (1)

- [class-transformer](https://npm.io/package/class-transformer.md) ^0.4.0

## Recent versions

- 0.0.60 (latest) — 2021-11-03
- 0.0.52 — 2021-11-03
- 0.0.51 — 2021-11-03
- 0.0.50 — 2021-11-03
- 0.0.40 — 2021-10-22
- 0.0.39 — 2021-10-22
- 0.0.38 — 2021-10-22
- 0.0.37 — 2021-10-10
- 0.0.36 — 2021-10-10
- 0.0.35 — 2021-10-10
- 0.0.34 — 2021-10-10
- 0.0.32 — 2021-10-10
- 0.0.31 — 2021-10-10
- 0.0.30 — 2021-10-10
- 0.0.29 — 2021-10-10
- … 25 more at https://npm.io/package/nestjs-message-bus/versions

## README

# Project Title

Nest-Js Message Bus

## Description

Message Bus implementation as a nest js module. As of now it supports `sync` and `cloud-task` transport.

## Setup

Import `MessageBusModule` with following configuration

```

@Module({
  imports: [
    MessageBusModule.register({
      transport: 'cloud-task',
      cloudTask: {
        defaultQueue: 'default',
        project: '',
        region: '',
        serviceAccountEmail: ''
        workerHostUrl: process.env.HOST + '/cloud-task-worker'
    })
  ]
})


```

Setup up a worker for cloud task, worker url must be same as `workerHostUrl` which is configured above.

```

@Controller()
export class WorkerController {

  constructor(
    private readonly worker: Worker, 
    private readonly receiver: CloudTaskReceiver,
  ) {}

  @Post('/cloud-task-worker')
  async runWorker() {
    await this.worker.run(this.receiver);
  }

}

```

## Usage

Create a message and associated handler.

- Message Handler is called immediately if `sync` transport is used.
- Message Handler call is deferred (queued) using google cloud task service if `cloud-task` transport is used.


```
export class ExampleMessage implements IMessage {
  constructor(public readonly body: string) {}
}


@MessageHandler(ExampleMessage)
export class ExampleMessageHandler implements IMessageHandler<ExampleMessage> {
  execute(message: ExampleMessage): Promise<void> {
    return Promise.resolve();
  }
}


@Injectable()
export class SomeService {
  constructor(
    private readonly messageBus: MessageBus,
  ) { }

  async exampleMethod() {
    await this.messageBus.dispatch(
      new ExampleMessage('content..'),
    );
  }

}

```

## Delayed Delivery

There are times when message execution must occur at a later time. Delaying a message is done using `DelayLabel`. Simply add a delay label with delay time in seconds when dispatching.

```
await this.messageBus.dispatch(
  new ExampleMessage('content..'), [
    new DelayLabel(600),
  ],
)
```

`ExampleMessage` will be delivered after 10 minutes delay. Max supported delay depends on the transport you're using.


## Testing

```
npm run test
```

---
_Source: https://npm.io/package/nestjs-message-bus · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
