Redis
Redis传输器实现了发布/订阅消息范式, 并利用了Redis的发布/订阅功能。 发布的消息被分类到通道中,而不知道最终哪些订阅者(如果有的话)将接收消息。 每个微服务可以订阅任意数量的通道。此外,可以同时订阅多个通道。 通过通道交换的消息是“发布并忘记”的, 这意味着如果发布了一条消息并且没有订阅者对其感兴趣,该消息将被删除,并且无法恢复。 因此,您不能保证消息或事件将由至少一个服务处理。单个消息可以被多个订阅者订阅(并接收)。
安装
要开始构建基于Redis的微服务,首先安装所需的包:
npm i --save ioredis
概述
要使用Redis传输器,请将以下选项对象传递给createMicroservice()
方法:
// main.ts
const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
transport: Transport.REDIS,
options: {
host: 'localhost',
port: 6379,
},
});
Transport
枚举从@nestjs/microservices
包中导入。
选项
options
属性是特定于所选传输器的。Redis传输器公开了下面描述的属性。
host
:连接URLport
:连接 端口retryAttempts
:重试消息的次数(默认:0
)retryDelay
:消息重试尝试之间的延迟(毫秒)(默认:0
)wildcards
:启用Redis通配符订阅,指示传输器在底层使用psubscribe/pmessage
。 (默认:false
)
所有由官方ioredis客户端支持的属性在此传输器中也都受支持。
客户端
像其他微服务传输器一样,
您有几种方法可以创建Redis ClientProxy
实例。
一种创建实例的方法是使用ClientsModule
。
要使用ClientsModule
创建客户端实例,
导入它并使用register()
方法传递一个带有与createMicroservice()
方法中显示的相同属性的选项对象,
以及一个用作注入令牌的name
属性。
在此处阅读有关ClientsModule
的更多信息。
@Module({
imports: [
ClientsModule.register([
{
name: 'MATH_SERVICE',
transport: Transport.REDIS,
options: {
host: 'localhost',
port: 6379,
}
},
]),
]
...
})
也可以使用其他创建客户端的选项(ClientProxyFactory
或@Client()
)。
您可以在此处阅读有关它们的信息。
上下文
在更复杂的场景中,您可能希望访问有关传入请求的更多信息。
当使用Redis传输器时,可以访问RedisContext
对象。
@MessagePattern('notifications')
getNotifications(@Payload() data: number[], @Ctx() context: RedisContext) {
console.log(`Channel: ${context.getChannel()}`);
}
@Payload()
,@Ctx()
和RedisContext
从@nestjs/microservices
包中导入。