Redis
Redis transporter implements the publish/subscribe messaging paradigm and leverages Pub/Sub feature of Redis. Published messages are categorized in channels, without knowing what subscribers (if any) will eventually receive the message. Each microservice can subscribe to any number of channels. In addition, more than one channel can be subscribed to at a time. Messages exchanged through channels are fire-and-forget, which means that if a message is published and there are no subscribers interested in it, the message is removed and cannot be recovered. Thus, you don’t have a guarantee that either messages or events will be handled by at least one service. A single message can be subscribed to (and received) by multiple subscribers.
Installation
To start building Redis-based microservices, first install the required package:
$ npm i --save redis
Overview
To use the Redis transporter, pass the following options object to the createMicroservice()
method:
@@filename(main)
const app = await NestFactory.createMicroservice(ApplicationModule, {
transport: Transport.REDIS,
options: {
url: 'redis://localhost:6379',
},
});
info Hint The
Transport
enum is imported from the@nestjs/microservices
package.
Likewise, to create a client instance, we need to pass an options object with the same properties we saw above in the createMicroservice()
method.
ClientsModule.register([
{
name: 'MATH_SERVICE',
transport: Transport.REDIS,
options: {
url: 'redis://localhost:6379',
}
},
]),
Other options to create a client (either ClientProxyFactory
or @Client()
) can be used as well. You can read about them here.
Context
In more sophisticated scenarios, you may want to access more information about the incoming request. In Redis, you can access the RedisContext
object.
@@filename()
@MessagePattern('notifications')
getDate(@Payload() data: number[], @Ctx() context: RedisContext) {
console.log(`Channel: ${context.getChannel()}`);
}
@@switch
@Bind(Payload(), Ctx())
@MessagePattern('notifications')
getDate(data, context) {
console.log(`Channel: ${context.getChannel()}`);
}
info Hint
@Payload()
,@Ctx()
andRedisContext
are imported from@nestjs/microservices
.
Options
The options
object is specific to the chosen transporter. The REDIS transporter exposes the properties described below.
url | Connection url |
retryAttempts | Number of times to retry message |
retryDelay | Delay between message retry attempts (ms) |