我正在尝试在Nestjs应用中使用Bull-Arena。
export class AppModule {
configure(consumer: MiddlewareConsumer) {
const queues = this.createArenaQueues();
const arena = Arena({ queues }, { disableListen: true });
consumer.apply(arena).forRoutes('/system/queues');
}
createArenaQueues() {
return [
{
name: 'Notification_Emailer',
hostId: 'MyAwesomeQueues',
url: 'redis://localhost',
},
];
}
}
这有效!
,但由于从db中加载队列,我需要使用异步/等待createArenaQueues()
。
export class AppModule {
configure(consumer: MiddlewareConsumer) {
const queues = await this.createArenaQueues(); //await here
const arena = Arena({ queues }, { disableListen: true });
consumer.apply(arena).forRoutes('/system/queues');
}
async createArenaQueues() { // async here
return [
{
name: 'Notification_Emailer',
hostId: 'MyAwesomeQueues',
url: 'redis://localhost',
},
];
}
}
不起作用!
那么,问题,如何处理?
从"系统"控制器中运行竞技场很酷,但我无法找到一种方法。
另外,我试图将竞技场移至独立的中间件,但不知道,最终我该怎么办:返回诸如res.send(arena)
或什么?
最简单的处理方法是async
配置支持,但未实现。
您可以为您的arenaQueues
创建一个自定义提供商,该提供商是异步创建的:
将自定义提供商添加到您的AppModule
的提供商:
providers: [
ArenaService,
{
provide: 'arenaQueues',
useFactory: async (arenaService: ArenaService) => arenaService.createArenaQueues(),
inject: [ArenaService],
},
],
然后将arenaQueues
注入您的AppModule
:
export class AppModule {
constructor(@Inject('arenaQueues') private queues) {}
configure(consumer: MiddlewareConsumer) {
// Now, you can use the asynchronously created this.queues here
const arena = Arena({ queues: this.queues }, { disableListen: true });
consumer.apply(arena).forRoutes('/system/queues');
}