我用的是带牛队列的巢。我使用@nestjs/bull包,一切都很好。但是,如果由于某种原因,我的应用程序没有连接到redis,我就不会收到任何错误。应用程序运行正常,不会收到任何错误,但不会处理队列。它只是挂着。即使是承诺也没有得到解决,它只是悬着。但是如果我的redis应用程序连接正确,那么一切都正常。现在,我想知道每次启动服务器时,redis服务器是否成功地连接到我的应用程序。
我怎么能这么做?
我已经搜索了很长一段时间了,但没有从谷歌那里得到任何东西。任何信息或资源都是有帮助的。谢谢。
发布于 2022-11-22 13:01:27
可以通过队列实例访问Redis客户端。
export class SomeService {
constructor(@InjectQueue("some-queue") private someQueue: Queue) {}
async getQueueStatus(): RedisStatus {
return this.someQueue.client.status;
}
}
通过这种方式,您可以访问具有status
属性type RedisStatus = "wait" | "reconnecting" | "connecting" | "connect" | "ready" | "close" | "end";
的Redis客户端实例。
我们所指的队列需要导入到模块中。
BullModule.registerQueue({
name: "some-queue",
})
您可以通过下面的服务检查Redis在启动时是否可用。注意:
需要在AppModule
中调用服务的
delay
函数在检查RedisState
之前等待一秒钟。可以扩展逻辑以满足您的需要。@Injectable()导出类RedisQueue { logger = new (“RedisQueue”);构造函数(@InjectQueue(“someQueue”)私有someQueue: someQueue){ this.init();}异步init() { try { this.delay(1000,1);this.checkQueueAvailability();} catch (e) { this.logger.error(e);} checkQueueAvailability ():void { if (this.someQueue.client.status ===“就绪”){ this.logger.log("Redis已准备好“);}this.logger.log{抛出新错误(”Redis空可用“);}}延迟(t: number,val: any) {返回新承诺(函数(解决)){setTimeout(函数(){setTimeout(Val));},t);} }
所以当你启动你的应用程序时,你会得到->
或->
https://stackoverflow.com/questions/73482536
复制相似问题