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.
Installation
Pour commencer à construire des microservices basés sur Redis, installez d’abord le package requis :
$ npm i --save ioredis
Aperçu
Pour utiliser le transporteur Redis, passez l’objet d’options suivant à la méthode createMicroservice()
:
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 |
---|---|
host | URL de connexion |
port | Port de connexion |
retryAttempts | Nombre de fois pour réessayer le message (défaut : 0 ) |
retryDelay | Délai entre les tentatives de réessai de message (ms) (défaut : 0 ) |
wildcards | Active 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.
@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
.
@MessagePattern('notifications')getNotifications(@Payload() data: number[], @Ctx() context: RedisContext) { console.log(`Channel: ${context.getChannel()}`);}