【发布时间】:2021-12-13 03:34:43
【问题描述】:
我一直在编写一个 nestjs 模块来监视我在 rabbitmq 上的队列和交换,目前要实现库功能,你必须在 RankMyRabbitmqModule 中注册你的交换,然后在你的 Watch 装饰器中匹配它,如下例所示:
模块:
RankMyRabbitmqModule.forRootAsync({
urls: ['amqp://guest:guest@localhost:5672'],
exchanges: [
{
name: 'ex01',
type: 'direct',
},
{
name: 'ex02',
type: 'direct',
},
],
}),
手表装饰器:
@Watch({
queue: 'q1',
exchange: 'ex01',
routingKey: 'blue',
})
blue(msg) {
console.log('[BLUE]:', msg);
}
它只会监视我的队列并使用参数设置函数来执行里面的东西,但我正在考虑一种改进这个库的方法,我想要一个这样的结构
@Exchange('ex01')
@Injectable()
export class Exchange01 {
@ExchangeRoute({
routingKey: 'blue',
queue: 'q1'
})
blue(msg) {
console.log(msg)
}
@ExchangeRoute({
routingKey: 'red',
queue: 'q1'
})
red(msg) {
console.log(msg)
}
}
为此,我必须先获取提供者元数据,然后还要获取其方法元数据...有没有办法以这种方式获取元数据?这是我目前仅获取装饰器元数据的实现
@Module({})
class MyModule implements OnModuleInit{
async OnModuleInit() {
const discoveryMethods = await params.discovery.providerMethodsWithMetaAtKey(META_KEY);
//TODO
//Get Provider By MetaKey
//Get Providers methods metadata
}
}
Obs:我正在使用一个名为 @golevelup/nestjs-discovery 的库来获取方法元数据。
如果有办法通过元数据获取我的提供者,然后获取我的提供者方法元数据,这将对我实现这个新功能有很大帮助,有人可以帮助我吗?
【问题讨论】:
标签: typescript rabbitmq nestjs decorator