Skip to content

Commit

Permalink
docs(event-listeners): update documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
weyoss committed Dec 23, 2023
1 parent 2d14a07 commit 71100d3
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 120 deletions.
27 changes: 6 additions & 21 deletions docs/api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@
- [IConsumerHeartbeatPayload](interfaces/IConsumerHeartbeatPayload.md)
- [IConsumerMessageHandlerArgs](interfaces/IConsumerMessageHandlerArgs.md)
- [IEventListener](interfaces/IEventListener.md)
- [IEventListenersConfig](interfaces/IEventListenersConfig.md)
- [IExchange](interfaces/IExchange.md)
- [IExchangeSerialized](interfaces/IExchangeSerialized.md)
- [IMessageSerialized](interfaces/IMessageSerialized.md)
Expand All @@ -88,11 +87,10 @@

### Type Aliases

- [IEventListenersConfigRequired](README.md#ieventlistenersconfigrequired)
- [IQueueMessagesPageParams](README.md#iqueuemessagespageparams)
- [TConsumerMessageHandler](README.md#tconsumermessagehandler)
- [TConsumerRedisKeys](README.md#tconsumerrediskeys)
- [TEventListenerInitArgs](README.md#teventlistenerinitargs)
- [TEventListenersConfig](README.md#teventlistenersconfig)
- [TExchange](README.md#texchange)
- [TExchangeDirect](README.md#texchangedirect)
- [TExchangeDirectBindingParams](README.md#texchangedirectbindingparams)
Expand All @@ -115,12 +113,6 @@

## Type Aliases

### IEventListenersConfigRequired

Ƭ **IEventListenersConfigRequired**: `Required`\<[`IEventListenersConfig`](interfaces/IEventListenersConfig.md)\>

___

### IQueueMessagesPageParams

Ƭ **IQueueMessagesPageParams**: `Object`
Expand Down Expand Up @@ -163,16 +155,9 @@ ___

___

### TEventListenerInitArgs

Ƭ **TEventListenerInitArgs**: `Object`
### TEventListenersConfig

#### Type declaration

| Name | Type |
| :------ | :------ |
| `eventProvider` | `EventEmitter`\<[`TRedisSMQEvent`](README.md#tredissmqevent)\> |
| `instanceId` | `string` |
Ƭ **TEventListenersConfig**: () => [`IEventListener`](interfaces/IEventListener.md)[]

___

Expand Down Expand Up @@ -285,12 +270,12 @@ ___
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `heartbeatTick` | (`timestamp`: `number`, `consumerId`: `string`, `heartbeatPayload`: [`IConsumerHeartbeat`](interfaces/IConsumerHeartbeat.md)) => `void` ; |
| `messageAcknowledged` | (`messageId`: `string`, `queue`: [`IQueueParams`](interfaces/IQueueParams.md), `messageHandlerId`: `string`, `consumerId`: `string`) => `void` ; |
| `messageDeadLettered` | (`cause`: [`EConsumeMessageDeadLetterCause`](enums/EConsumeMessageDeadLetterCause.md), `messageId`: `string`, `queue`: [`IQueueParams`](interfaces/IQueueParams.md), `messageHandlerId`: `string`, `consumerId`: `string`) => `void` ; |
| `messageDeadLettered` | (`messageId`: `string`, `queue`: [`IQueueParams`](interfaces/IQueueParams.md), `messageHandlerId`: `string`, `consumerId`: `string`, `cause`: [`EConsumeMessageDeadLetterCause`](enums/EConsumeMessageDeadLetterCause.md)) => `void` ; |
| `messageDelayed` | (`messageId`: `string`, `queue`: [`IQueueParams`](interfaces/IQueueParams.md), `messageHandlerId`: `string`, `consumerId`: `string`) => `void` ; |
| `messagePublished` | (`messageId`: `string`, `queue`: [`IQueueParams`](interfaces/IQueueParams.md)) => `void` ; |
| `messagePublished` | (`messageId`: `string`, `queue`: [`IQueueParams`](interfaces/IQueueParams.md), `producerId`: `string`) => `void` ; |
| `messageReceived` | (`messageId`: `string`, `queue`: [`IQueueParams`](interfaces/IQueueParams.md), `consumerId`: `string`) => `void` ; |
| `messageRequeued` | (`messageId`: `string`, `queue`: [`IQueueParams`](interfaces/IQueueParams.md), `messageHandlerId`: `string`, `consumerId`: `string`) => `void` ; |
| `messageUnacknowledged` | (`cause`: [`EConsumeMessageUnacknowledgedCause`](enums/EConsumeMessageUnacknowledgedCause.md), `messageId`: `string`, `queue`: [`IQueueParams`](interfaces/IQueueParams.md), `messageHandlerId`: `string`, `consumerId`: `string`) => `void` ; |
| `messageUnacknowledged` | (`messageId`: `string`, `queue`: [`IQueueParams`](interfaces/IQueueParams.md), `messageHandlerId`: `string`, `consumerId`: `string`, `cause`: [`EConsumeMessageUnacknowledgedCause`](enums/EConsumeMessageUnacknowledgedCause.md)) => `void` ; |

___

Expand Down
11 changes: 8 additions & 3 deletions docs/api/interfaces/IEventListener.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

# Interface: IEventListener

## Hierarchy

- `EventEmitter`\<[`TRedisSMQEvent`](../README.md#tredissmqevent)\>

**`IEventListener`**

## Table of contents

### Methods
Expand All @@ -13,13 +19,12 @@

### init

**init**(`args`, `cb`): `void`
**init**(`cb`): `void`

#### Parameters

| Name | Type |
| :------ | :------ |
| `args` | [`TEventListenerInitArgs`](../README.md#teventlistenerinitargs) |
| `cb` | `ICallback`\<`void`\> |

#### Returns
Expand All @@ -40,4 +45,4 @@ ___

#### Returns

`void`
`void`
22 changes: 0 additions & 22 deletions docs/api/interfaces/IEventListenersConfig.md

This file was deleted.

2 changes: 1 addition & 1 deletion docs/api/interfaces/IRedisSMQConfig.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

### eventListeners

`Optional` **eventListeners**: [`IEventListenersConfig`](IEventListenersConfig.md)
`Optional` **eventListeners**: [`TEventListenersConfig`](../README.md#teventlistenersconfig)

___

Expand Down
2 changes: 1 addition & 1 deletion docs/api/interfaces/IRedisSMQConfigRequired.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

### eventListeners

**eventListeners**: `Required`\<[`IEventListenersConfig`](IEventListenersConfig.md)\>
**eventListeners**: [`TEventListenersConfig`](../README.md#teventlistenersconfig)

#### Overrides

Expand Down
2 changes: 1 addition & 1 deletion docs/esm-cjs-modules.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const queue = new Queue();
queue.save('my_queue', EQueueType.LIFO_QUEUE, (err) => console.log(err));
```

## Using RedisSMQ as an CJS Module
## Using RedisSMQ as a CJS Module

```javascript
const { Queue, EQueueType } = require('redis-smq');
Expand Down
103 changes: 32 additions & 71 deletions docs/event-listeners.md
Original file line number Diff line number Diff line change
@@ -1,39 +1,40 @@
[RedisSMQ](../README.md) / [Docs](README.md) / IEvent listeners
[RedisSMQ](../README.md) / [Docs](README.md) / Event listeners

# IEvent listeners
# Event listeners

IEvent listeners can be a way to automate processing every event from each consumer or producer instance.
Event listeners is a way to automate processing every event from each consumer or producer instance.

Let's suppose that for some reason you want to catch all `events.MESSAGE_ACKNOWLEDGED` events from all created
Let's suppose that for some reason you want to catch all `messageAcknowledged` events from all created
consumer instances in your application.

There are many ways to take in order to achieve your goal. The most repetitive and error prone way is to manually
There are many ways to take in order to achieve this goal. The most repetitive and error prone way is to manually
register an event listener after creating each consumer instance like this way:

```javascript
const consumer = new Consumer();
consumer.on('messageAcknowledged', (msg) => {
consumer.on('messageAcknowledged', (messageId, queue, messageHandlerId, consumerId) => {
//...
})
```

A more convenient way to do the same thing but with less manual work, is to configure RedisSMQ to initialize and
A more convenient way to do the same thing but with less manual work is to configure RedisSMQ to initialize and
manage event listeners for you.

## Consumer IEvent Listeners
## Usage

Let's create a consumer event listener class which we will use to demonstrate how to work with consumer event listeners.
### Creating Event Listeners

Let's create an event listener class which we will use to demonstrate how to work with event listeners.

```typescript
import { IEventListener, IEventProvider, TEventListenerInitArgs } from 'redis-smq';
import { ICallback } from "redis-smq-common";

export class ConsumerEventListener implements IEventListener {
init(
args: TEventListenerInitArgs,
cb: ICallback<void>
) {
// ...
import { IEventListener, TRedisSMQEvent } from 'redis-smq';
import { ICallback, EventEmitter } from "redis-smq-common";

class MyEventListener extends EventEmitter<TRedisSMQEvent> implements IEventListener {
init(cb: ICallback<void>) {
this.on('messageAcknowledged', (messageId, queue, messageHandlerId, consumerId) => {
//...
})
}

quit(cb: ICallback<void>) {
Expand All @@ -43,75 +44,35 @@ export class ConsumerEventListener implements IEventListener {
}
```

Each time you create a consumer instance, under the hood, RedisSMQ initializes the provided event listeners and manages them until the instance is destroyed.

A consumer event listener class implements the `IEventListener` interface:

```typescript
interface IEventListener {
init(args: TEventListenerInitArgs, cb: ICallback<void>): void;
quit(cb: ICallback<void>): void;
}
```
Each time you create a Consumer or Producer instance, under the hood, RedisSMQ initializes the provided event listeners and manages them until the instance is destroyed.

You may use the `init()` to perform any initialization steps that your listener may need.
An event listener implements the [`IEventListener`](api/interfaces/IEventListener.md) interface.

The first argument of the `init()` method (`args`) is an object which provides:
The [`init()`](api/interfaces/IEventListener.md#init) is intended to perform any initialization steps that your event listener may need.

- `args.instanceId`: The ID of the consumer/producer instance.
- `args.eventProvider`: An event emitter instance which emits all event from the given instance.
- `args.config`: The configuration that is being in use and that may be used in your event listener instance initialization.
The [`quit()`](api/interfaces/IEventListener.md#quit) method is required to gracefully shut down your event listener instance when a consumer/producer goes down.

The `quit()` method is required to gracefully shut down your event listener instance when a consumer/producer goes down.
### Registering Event Listeners

Using a configuration object, RedisSMQ allows you to register one or many event listener classes as shown in the example bellow:

```typescript
import { IConfig, Configuration } from 'redis-smq';

const config: IConfig = {
eventListener: {
consumerEventListeners: [ConsumerEventListener]
}
eventListener: [MyEventListener]
}

Configuration.getSetConfig(config);
```

## Producer IEvent Listeners
### Emitted Events

The producer event listener class also implements the `IEventListener` interface:

Example:

```typescript
import { IEventListener, IEventProvider, events } from 'redis-smq';

export class ProducerEventListener implements IEventListener {
init(args: TEventListenerInitArgs, cb: ICallback<void>) {
// ...
}

quit(cb: ICallback<void>) {
// ...
}
}
```

Similarly to a consumer event listener, you can tell RedisSMQ to use a producer event listener by including it in the `eventListener.producerEventListeners` array from the configuration object as shown bellow:

```typescript
import { IConfig, Configuration } from 'redis-smq';

const config: IConfig = {
eventListener: {
producerEventListeners: [ProducerEventListener]
}
}

Configuration.getSetConfig(config);
```
An event listener allows subscribing to the following events:

## Message Events
- `messagePublished`
- `messageAcknowledged`
- `messageUnacknowledged`
- `messageDeadLettered`

See [TRedisSMQEvent](api/README.md#tredissmqevent).
See [TRedisSMQEvent](api/README.md#tredissmqevent) for more details.

0 comments on commit 71100d3

Please sign in to comment.