Passer au contenu

Redis

Le Redis transporteur implémente le paradigme de messagerie publish/subscribe et tire parti de la fonctionnalité Pub/Sub de Redis. Les messages publiés sont catégorisés dans des canaux, sans savoir quels abonnés (le cas échéant) recevront finalement le message. Chaque microservice peut s’abonner à n’importe quel nombre de canaux. De plus, plusieurs canaux peuvent être abonnés en même temps. Les messages échangés via des canaux sont fire-and-forget, ce qui signifie que si un message est publié et qu’il n’y a aucun abonné intéressé, le message est supprimé et ne peut pas être récupéré. Ainsi, vous n’avez pas la garantie que les messages ou événements seront gérés par au moins un service. Un seul message peut être abonné (et reçu) par plusieurs abonnés.

Redis

Installation

Pour commencer à construire des microservices basés sur Redis, installez d’abord le package requis :

Fenêtre de terminal
$ npm i --save ioredis

Aperçu

Pour utiliser le transporteur Redis, passez l’objet d’options suivant à la méthode createMicroservice() :

main.ts
main.ts
const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
transport: Transport.REDIS,
options: {
host: 'localhost',
port: 6379,
},
});

Options

La propriété options est spécifique au transporteur choisi. Le transporteur Redis expose les propriétés décrites ci-dessous.

PropriétéDescription
hostURL de connexion
portPort de connexion
retryAttemptsNombre de fois pour réessayer le message (défaut : 0)
retryDelayDélai entre les tentatives de réessai de message (ms) (défaut : 0)
wildcardsActive les abonnements aux jokers Redis, demandant au transporteur d’utiliser psubscribe/pmessage en arrière-plan. (défaut : false)

Toutes les propriétés prises en charge par le client officiel ioredis sont également prises en charge par ce transporteur.

Client

Comme pour d’autres transporteurs de microservices, vous avez plusieurs options pour créer une instance de ClientProxy Redis.

Une méthode pour créer une instance consiste à utiliser le ClientsModule. Pour créer une instance de client avec le ClientsModule, importez-le et utilisez la méthode register() pour passer un objet d’options avec les mêmes propriétés que celles montrées ci-dessus dans la méthode createMicroservice(), ainsi qu’une propriété name à utiliser comme jeton d’injection. Pour en savoir plus sur le ClientsModule, lisez ici.

clients.module.ts
@Module({
imports: [
ClientsModule.register([
{
name: 'MATH_SERVICE',
transport: Transport.REDIS,
options: {
host: 'localhost',
port: 6379,
},
},
]),
],
})

D’autres options pour créer un client (soit ClientProxyFactory ou @Client()) peuvent également être utilisées. Vous pouvez lire à leur sujet ici.

Contexte

Dans des scénarios plus sophistiqués, vous souhaiterez peut-être accéder à plus d’informations sur la requête entrante. Lorsque vous utilisez le transporteur Redis, vous pouvez accéder à l’objet RedisContext.

notifications.service.ts
@MessagePattern('notifications')
getNotifications(@Payload() data: number[], @Ctx() context: RedisContext) {
console.log(`Channel: ${context.getChannel()}`);
}