我开始使用 @ssut/nestjs-sqs ,我对它的工作原理有点困惑。
根据文档,您需要在提供程序中拥有此代码:
@SqsMessageHandler(/** name: */ 'queueName', /** batch: */ false)
public async handleMessage(message: AWS.SQS.Message) {
// Logic to handle the message
}
我希望在控制器中使用消息,然后将数据发送给提供者。但如果我尝试将此方法放入控制器中,我会得到
[SqsService] No metadata found for: <my_sqs_queue>
为什么messageHandler方法只能在Service文件中起作用,而不能在控制器中起作用?
这是由于 Nest 的
DiscoveryService
的工作方式以及 SqsService
如何使用 DiscoveryService
。有一个 Discover#providerMethodsWithMetaAtKey
方法 only 查看提供者,因此当您将该装饰器添加到控制器时,发现服务将永远不会看到它,并且 sqs 服务将无法对其进行操作。